Below are the keys to interpreting the different parameter ‘levels’
of each Scenario. We have a total of 12,500 unique Scenarios
Vital Rates, K Selected
| age |
birthRate |
survivalRate |
N0_proportion |
| 0 |
0.00 |
0.79 |
0.4028683 |
| 1 |
0.35 |
0.99 |
0.2199568 |
| 2 |
1.30 |
0.95 |
0.1504942 |
| 3 |
1.30 |
0.97 |
0.0988077 |
| 4 |
1.45 |
0.80 |
0.0662383 |
| 5 |
1.30 |
0.71 |
0.0366224 |
| 6 |
1.55 |
0.44 |
0.0179702 |
| 7 |
1.50 |
0.35 |
0.0054645 |
| 8 |
1.45 |
0.28 |
0.0013218 |
| 9 |
0.90 |
0.00 |
0.0002558 |
Boldness rbeta Shape Parameters
| Parameter |
Shape |
skewLow |
skewMedLow |
uniform |
skewMedHigh |
skewHigh |
| Boldness |
rbeta: Shape1 |
1 |
2 |
1 |
5 |
5 |
| Boldness |
rbeta: Shape2 |
5 |
5 |
1 |
2 |
1 |
Poisson Lambda, Information Transfer, and Naive Learning
| Parameter |
Low |
MedLow |
Med |
MedHigh |
High |
| rpois: Lambda |
0.000 |
1.000 |
2.00 |
3.0 |
4.0 |
| probability: InfoTransfer |
0.005 |
0.010 |
0.05 |
0.1 |
0.5 |
| probability: InfoDeath |
0.010 |
0.100 |
0.20 |
0.4 |
0.6 |
| rbinom: naiveLearn |
0.000 |
0.005 |
0.01 |
0.1 |
0.5 |
Vertical Transmission
| Parameter |
True |
False |
| Vertical Transmission |
TRUE |
FALSE |
Boxplots on the general effects of each parameter
The x-axis labels follow this pattern: ‘Vitals - End Result
- Parameter Level - Mean Parameter Value (for survived and extirpated
results)’. This is across all scenarios, with each scenario
having 50 iterations. So these data are grouped to a certain extent to
provide you with general patterns.







Attempt to try and quantify the results of the above plots
By taking the same data the the Box Plots are based off of, I fit
individual linear models (ANOVA) to each dataset, in the for of
MeanYears ~ Scenario. I then captured the Estimates for each
Scenario into a table and each column is the model parameter estimate
for the scenario given that parameter. This was the first method that
popped into my head to try and compare effect sizes between different
IBM parameters. I then performed a complete Pairwise Contrast between
all scenarios within a parameter model. The scatter plots below are some
graphical representations of the covariation between two IBM parameters
in Effect-size Space. I hope this makes sense and is
somewhat useful. All parameters seems to covary positively with the
others, but there are some patterns when you look across the K vs R
selected space and whether the model populations survived or were
extirpated. The plots are dynamic, so you can turn on/off each point by
double-clicking in the legend and hover allows you to see values.
Here are the actual tables of the Effect Sizes for the linear
models
This table represent the Effect size of each Scenario on MeanYears to
reach K or Crash. I did not calculate any differences between effect
sizes, but you could do so if you feel it would be informative.
This table represent the Effect size Pairwise comparisons of each
Scenario on MeanYears to reach K or Crash. This is the table used for
the above Scatterplots. FYI: For this to work, I
renamed the Bold categories to be Low - High, so I removed the prefix
‘skew’, and I also renamed ‘uniform’ to = ‘Med’. Just to allow for
easier data joining.
LS0tDQp0aXRsZTogIktub3dsZWRnZSBJQk0gVHVuaW5nIFN0YXRpc3RpY3MiDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KPHN0eWxlPg0KICAubXlUYWJsZSB0ZCB7DQogICAgcGFkZGluZzogNDBweDsNCiAgfQ0KPC9zdHlsZT4NCg0KYGBge3IgZWNobz1GQUxTRSwgaW5jbHVkZT1GQUxTRX0NCnJlcXVpcmUoUlNRTGl0ZSkNCnJlcXVpcmUoanNvbmxpdGUpDQpyZXF1aXJlKHRpZHl2ZXJzZSkNCnJlcXVpcmUoa2FibGVFeHRyYSkNCnJlcXVpcmUoZW1tZWFucykNCnJlcXVpcmUocGxvdGx5KQ0KcmVxdWlyZShncmlkRXh0cmEpDQpsaWJyYXJ5KGRlbW9nUikNCiMgQ29ubmVjdCB0byB0aGUgZGF0YWJhc2UNCmJveF9mbGRyIDwtICJFOi9Cb3ggU3luYy9Lbm93bGVkZ2VJQk1fcmVzdWx0cyINCg0KIyBDcmVhdGUvQ29ubmVjdCB0byBTUUxpdGUgREIgZm9yIHN0b3JhZ2Ugb2YgbW9kZWwgcnVucw0KZGJDb25uIDwtIGRiQ29ubmVjdChTUUxpdGUoKSwgcGFzdGUwKGJveF9mbGRyLCAiLi9Lbm93bGVkZ2VJQk1fTW9kZWxUdW5pbmdLXzIwMjMwMjA3LnNxbGl0ZSIpKQ0KDQojIEdldCB0aGUgcGFyYW1ldGVyIHJhbmdlcw0Kc2NlbjwtIGRiU2VuZFF1ZXJ5KGRiQ29ubiwgIlNFTEVDVCAqIEZST00gdGJsTW9kZWxTY2VuYXJpb3NfRVEiKSAlPiUgDQogIGRiRmV0Y2goKQ0KDQojIEsgc2VsZWN0ZWQgZXhhbXBsZQ0KZEsgPC0gZGF0YS5mcmFtZShhZ2U9YygwLDEsMiwzLDQsNSw2LDcsOCw5KSwNCiAgICAgICAgICAgICAgICAgYmlydGhSYXRlPWMoMCwwLjM1LDEuMywxLjMsMS40NSwxLjMsMS41NSwxLjUsMS40NSwwLjkpLA0KICAgICAgICAgICAgICAgICBzdXJ2aXZhbFJhdGU9YygwLjc5LDAuOTksMC45NSwwLjk3LDAuODAsMC43MSwwLjQ0LDAuMzUsMC4yOCwwKSkNCg0KDQpLIDwtIG9kaWFnKGRLJHN1cnZpdmFsUmF0ZVsxOihucm93KGRLKS0xKV0sLTEpICMgUHgsIHN1cnZpdmFsIHJhdGVzIChub3RlLCB0aGUgc3Vydml2YWwgcmF0ZSBpbiBmaW5hbCBhZ2UgY2xhc3MgaXMgMCBhdXRvbWF0aWNhbGx5KQ0KS1sxLF0gPC0gZEskYmlydGhSYXRlICMgRmVydGlsaXR5DQpzdGJsX2FnZSA8LSBlaWdlbi5hbmFseXNpcyhLKSRzdGFibGUuYWdlDQpkSyROMF9wcm9wb3J0aW9uIDwtIGMoMCxzdGJsX2FnZVsyOmxlbmd0aChzdGJsX2FnZSldKQ0KZEskTjBfcHJvcG9ydGlvbiA8LSBzdGJsX2FnZQ0KI2RLJE4wX3Byb2Jfa25vd2luZyA8LSBjKDAuMDUsIDAuMDUsIDAuMDUsIDAuMDUsIDAuMDUsIDAuMDUsIDAuMDUsIDAuMDUsIDAuMDUsIDAuMDUpDQoNCiMgZEsgPC0gZGF0YS5mcmFtZShhZ2U9YygwLDEsMiwzKSwNCiMgICAgICAgICAgICAgICAgIGJpcnRoUmF0ZT1jKDAsMS40LDEuOSwxLjc1KSwNCiMgICAgICAgICAgICAgICAgIHN1cnZpdmFsUmF0ZT1jKDAuNywwLjk1LDAuOSwwKSkNCiMgSyA8LSBkZW1vZ1I6Om9kaWFnKGRLJHN1cnZpdmFsUmF0ZVsxOihucm93KGRLKS0xKV0sLTEpICMgUHgsIHN1cnZpdmFsIHJhdGVzIChub3RlLCB0aGUgc3Vydml2YWwgcmF0ZSBpbiBmaW5hbCBhZ2UgY2xhc3MgaXMgMCBhdXRvbWF0aWNhbGx5KQ0KIyBLWzEsXSA8LSBkSyRiaXJ0aFJhdGUgIyBGZXJ0aWxpdHkNCiMgc3RibF9hZ2UgPC0gZGVtb2dSOjplaWdlbi5hbmFseXNpcyhLKSRzdGFibGUuYWdlDQojIGRLJE4wX3Byb3BvcnRpb24gPC0gYygwLHN0YmxfYWdlWzI6bGVuZ3RoKHN0YmxfYWdlKV0pDQojIGRLJE4wX3Byb3BvcnRpb24gPC0gc3RibF9hZ2UNCiMgZEskTjBfcHJvYl9rbm93aW5nIDwtIGMoMC4wNSwgMC4wNSwgMC4wNSwgMC4wNSkNCg0KIyAjIFIgc2VsZWN0ZWQgZXhhbXBsZQ0KIyBkUiA8LSBkYXRhLmZyYW1lKGFnZT1jKDAsMSwyLDMpLA0KIyAgICAgICAgICAgICAgICAgYmlydGhSYXRlPWMoMCw5LjMsMTEuOCw1LjYpLA0KIyAgICAgICAgICAgICAgICAgc3Vydml2YWxSYXRlPWMoMC4zLDAuNjc5LDAuNTk0LDApKQ0KIyBLIDwtIGRlbW9nUjo6b2RpYWcoZFIkc3Vydml2YWxSYXRlWzE6KG5yb3coZFIpLTEpXSwtMSkgIyBQeCwgc3Vydml2YWwgcmF0ZXMgKG5vdGUsIHRoZSBzdXJ2aXZhbCByYXRlIGluIGZpbmFsIGFnZSBjbGFzcyBpcyAwIGF1dG9tYXRpY2FsbHkpDQojIEtbMSxdIDwtIGRSJGJpcnRoUmF0ZSAjIEZlcnRpbGl0eQ0KIyBzdGJsX2FnZSA8LSBkZW1vZ1I6OmVpZ2VuLmFuYWx5c2lzKEspJHN0YWJsZS5hZ2UNCiMgZFIkTjBfcHJvcG9ydGlvbiA8LSBjKDAsc3RibF9hZ2VbMjpsZW5ndGgoc3RibF9hZ2UpXSkNCiMgZFIkTjBfcHJvcG9ydGlvbiA8LSBzdGJsX2FnZQ0KIyBkUiROMF9wcm9iX2tub3dpbmcgPC0gYygwLjA1LCAwLjA1LCAwLjA1LCAwLjA1KQ0KDQoNCiMgUGFyYW1ldGVycyB0byBhZGp1c3QgZm9yIHNlbnNpdGl2aXR5IGFuYWx5c2lzDQojc2V4UmF0aW8gPC0gYygwLjQsIDAuNSwgMC42KQ0KDQojIGQgPC0gbGlzdChLc2VsZWN0ZWQgPSBkSywNCiMgICAgICAgICAgIFJzZWxlY3RlZCA9IGRSKQ0KZCA8LSBsaXN0KEtzZWxlY3RlZCA9IGRLKQ0KDQpib2xkRGlzdCA8LSBkYXRhLmZyYW1lKFBhcmFtZXRlciA9ICJCb2xkbmVzcyIsDQogICAgICAgICAgICAgICAgICAgICAgIFNoYXBlID0gYygicmJldGE6IFNoYXBlMSIsICJyYmV0YTogU2hhcGUyIiksDQogICAgICAgICAgICAgICAgICAgICAgIHNrZXdMb3cgPSBjKDEsIDUpLA0KICAgICAgICAgICAgICAgICAgICAgICBza2V3TWVkTG93ID0gYygyLCA1KSwNCiAgICAgICAgICAgICAgICAgICAgICAgdW5pZm9ybSA9IGMoMSwgMSksDQogICAgICAgICAgICAgICAgICAgICAgIHNrZXdNZWRIaWdoID0gYyg1LCAyKSwNCiAgICAgICAgICAgICAgICAgICAgICAgc2tld0hpZ2ggPSBjKDUsIDEpKQ0KDQpwb2lzTGFtYmRhIDwtIGRhdGEuZnJhbWUoUGFyYW1ldGVyID0gInJwb2lzOiBMYW1iZGEiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICBMb3cgPSAwLA0KICAgICAgICAgICAgICAgICAgICAgICAgIE1lZExvdyA9IDEsDQogICAgICAgICAgICAgICAgICAgICAgICAgTWVkID0gMiwNCiAgICAgICAgICAgICAgICAgICAgICAgICBNZWRIaWdoID0gMywNCiAgICAgICAgICAgICAgICAgICAgICAgICBIaWdoID0gNCkNCg0KaW5mb3RyYW5zZmVyIDwtIGRhdGEuZnJhbWUoUGFyYW1ldGVyID0gInByb2JhYmlsaXR5OiBJbmZvVHJhbnNmZXIiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgTG93ID0gMC4wMDUsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVkTG93ID0gMC4wMSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lZCA9IDAuMDUsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVkSGlnaCA9IDAuMSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICBIaWdoID0gMC41KQ0KDQppbmZvRGVhdGggPC0gZGF0YS5mcmFtZShQYXJhbWV0ZXIgPSAicHJvYmFiaWxpdHk6IEluZm9EZWF0aCIsDQogICAgICAgICAgICAgICAgICAgICAgICBMb3cgPSAwLjAxLA0KICAgICAgICAgICAgICAgICAgICAgICAgTWVkTG93ID0gMC4xLA0KICAgICAgICAgICAgICAgICAgICAgICAgTWVkID0gMC4yLA0KICAgICAgICAgICAgICAgICAgICAgICAgTWVkSGlnaCA9IDAuNCwNCiAgICAgICAgICAgICAgICAgICAgICAgIEhpZ2ggPSAwLjYpDQoNCm5haXZlTGVhcm4gPC0gZGF0YS5mcmFtZShQYXJhbWV0ZXIgPSAicmJpbm9tOiBuYWl2ZUxlYXJuIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICBMb3cgPSAwLCANCiAgICAgICAgICAgICAgICAgICAgICAgICBNZWRMb3cgPSAwLjAwNSwNCiAgICAgICAgICAgICAgICAgICAgICAgICBNZWQgPSAwLjAxLA0KICAgICAgICAgICAgICAgICAgICAgICAgIE1lZEhpZ2ggPSAwLjEsDQogICAgICAgICAgICAgICAgICAgICAgICAgSGlnaCA9IDAuNSkNCg0KdmVydFRyYW5zbWlzc2lvbiA8LSBkYXRhLmZyYW1lKFBhcmFtZXRlciA9ICJWZXJ0aWNhbCBUcmFuc21pc3Npb24iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRydWUgPSBUUlVFLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZhbHNlID0gRkFMU0UpDQoNCnBhcmFtczwtIHJiaW5kKHBvaXNMYW1iZGEsIGluZm90cmFuc2ZlciwgaW5mb0RlYXRoLCBuYWl2ZUxlYXJuKQ0KDQpkYXQ8LSBkYlNlbmRRdWVyeShkYkNvbm4sICJTRUxFQ1QgKiBGUk9NIHRibE1vZGVsU3RhdHNfRVEiKSAlPiUgDQogIGRiRmV0Y2goKQ0KDQojIFN1bW1hcml6ZSB0aGUgZGF0YSBieSBzY2VuYXJpbw0Kc3VtRGF0PC0gZGF0ICU+JSANCiAgZmlsdGVyKHlyICE9IDApICU+JSANCiAgZ3JvdXBfYnkoU2NlbmFyaW8sIHlyKSAlPiUgDQogIHN1bW1hcmlzZShwb3Auc2l6ZV9NZWFuID0gbWVhbihwb3Auc2l6ZSwgbmEucm0gPSBUUlVFKSwNCiAgICAgICAgICAgIHBvcC5zaXplX1NEID0gc2QocG9wLnNpemUsIG5hLnJtID0gVFJVRSksDQogICAgICAgICAgICBwb3Auc2l6ZV9RMDMgPSBxdWFudGlsZShwb3Auc2l6ZSwgcHJvYnMgPSAwLjAzLCBuYS5ybSA9IFRSVUUpLA0KICAgICAgICAgICAgcG9wLnNpemVfUTk3ID0gcXVhbnRpbGUocG9wLnNpemUsIHByb2JzID0gMC45NywgbmEucm0gPSBUUlVFKSwNCiAgICAgICAgICAgIGJpcnRoc19NZWFuID0gbWVhbihiaXJ0aHMsIG5hLnJtID0gVFJVRSksDQogICAgICAgICAgICBiaXJ0aHNfU0QgPSBzZChiaXJ0aHMsIG5hLnJtID0gVFJVRSksDQogICAgICAgICAgICBiaXJ0aHNfUTAzID0gcXVhbnRpbGUoYmlydGhzLCBwcm9icyA9IDAuMDMsIG5hLnJtID0gVFJVRSksDQogICAgICAgICAgICBiaXJ0aHNfUTk3ID0gcXVhbnRpbGUoYmlydGhzLCBwcm9icyA9IDAuOTcsIG5hLnJtID0gVFJVRSksDQogICAgICAgICAgICBkZWF0aHNfTWVhbiA9IG1lYW4oZGVhdGhzLCBuYS5ybSA9IFRSVUUpLA0KICAgICAgICAgICAgZGVhdGhzX1NEID0gc2QoZGVhdGhzLCBuYS5ybSA9IFRSVUUpLA0KICAgICAgICAgICAgZGVhdGhzX1EwMyA9IHF1YW50aWxlKGRlYXRocywgcHJvYnMgPSAwLjAzLCBuYS5ybSA9IFRSVUUpLA0KICAgICAgICAgICAgZGVhdGhzX1E5NyA9IHF1YW50aWxlKGRlYXRocywgcHJvYnMgPSAwLjk3LCBuYS5ybSA9IFRSVUUpLA0KICAgICAgICAgICAgZnJhYy5pbmZvcm1lZF9NZWFuID0gbWVhbihmcmFjLmluZm9ybWVkLCBuYS5ybSA9IFRSVUUpLA0KICAgICAgICAgICAgZnJhYy5pbmZvcm1lZF9TRCA9IHNkKGZyYWMuaW5mb3JtZWQsIG5hLnJtID0gVFJVRSksDQogICAgICAgICAgICBmcmFjLmluZm9ybWVkX1EwMyA9IHF1YW50aWxlKGZyYWMuaW5mb3JtZWQsIHByb2JzID0gMC4wMywgbmEucm0gPSBUUlVFKSwNCiAgICAgICAgICAgIGZyYWMuaW5mb3JtZWRfUTk3ID0gcXVhbnRpbGUoZnJhYy5pbmZvcm1lZCwgcHJvYnMgPSAwLjk3LCBuYS5ybSA9IFRSVUUpLA0KICAgICAgICAgICAgbnVtLnNvY2lhbExlYXJuX01lYW4gPSBtZWFuKG51bS5zb2NpYWxMZWFybiwgbmEucm0gPSBUUlVFKSwNCiAgICAgICAgICAgIG51bS5zb2NpYWxMZWFybl9TRCA9IHNkKG51bS5zb2NpYWxMZWFybiwgbmEucm0gPSBUUlVFKSwNCiAgICAgICAgICAgIG51bS5zb2NpYWxMZWFybl9RMDMgPSBxdWFudGlsZShudW0uc29jaWFsTGVhcm4sIHByb2JzID0gMC4wMywgbmEucm0gPSBUUlVFKSwNCiAgICAgICAgICAgIG51bS5zb2NpYWxMZWFybl9ROTcgPSBxdWFudGlsZShudW0uc29jaWFsTGVhcm4sIHByb2JzID0gMC45NywgbmEucm0gPSBUUlVFKSwNCiAgICAgICAgICAgIG51bS5hc29jaWFsTGVhcm5fTWVhbiA9IG1lYW4obnVtLmFzb2NpYWxMZWFybiwgbmEucm0gPSBUUlVFKSwNCiAgICAgICAgICAgIG51bS5hc29jaWFsTGVhcm5fU0QgPSBzZChudW0uYXNvY2lhbExlYXJuLCBuYS5ybSA9IFRSVUUpLA0KICAgICAgICAgICAgbnVtLmFzb2NpYWxMZWFybl9RMDMgPSBxdWFudGlsZShudW0uYXNvY2lhbExlYXJuLCBwcm9icyA9IDAuMDMsIG5hLnJtID0gVFJVRSksDQogICAgICAgICAgICBudW0uYXNvY2lhbExlYXJuX1E5NyA9IHF1YW50aWxlKG51bS5hc29jaWFsTGVhcm4sIHByb2JzID0gMC45NywgbmEucm0gPSBUUlVFKSwNCiAgICAgICAgICAgIHRvdGFsLm51bS5pbnRlcmFjdGlvbnNfTWVhbiA9IG1lYW4odG90YWwubnVtLmludGVyYWN0aW9ucywgbmEucm0gPSBUUlVFKSwNCiAgICAgICAgICAgIHRvdGFsLm51bS5pbnRlcmFjdGlvbnNfU0QgPSBzZCh0b3RhbC5udW0uaW50ZXJhY3Rpb25zLCBuYS5ybSA9IFRSVUUpLA0KICAgICAgICAgICAgdG90YWwubnVtLmludGVyYWN0aW9uc19RMDMgPSBxdWFudGlsZSh0b3RhbC5udW0uaW50ZXJhY3Rpb25zLCBwcm9icyA9IDAuMDMsIG5hLnJtID0gVFJVRSksDQogICAgICAgICAgICB0b3RhbC5udW0uaW50ZXJhY3Rpb25zX1E5NyA9IHF1YW50aWxlKHRvdGFsLm51bS5pbnRlcmFjdGlvbnMsIHByb2JzID0gMC45NywgbmEucm0gPSBUUlVFKSwNCiAgICAgICAgICAgIG1lZC5hZ2VfTWVhbiA9IG1lYW4obWVkLmFnZSwgbmEucm0gPSBUUlVFKSwNCiAgICAgICAgICAgIG1lZC5hZ2VfU0QgPSBzZChtZWQuYWdlLCBuYS5ybSA9IFRSVUUpLA0KICAgICAgICAgICAgbWVkLmFnZV9RMDMgPSBxdWFudGlsZShtZWQuYWdlLCBwcm9icyA9IDAuMDMsIG5hLnJtID0gVFJVRSksDQogICAgICAgICAgICBtZWQuYWdlX1E5NyA9IHF1YW50aWxlKG1lZC5hZ2UsIHByb2JzID0gMC45NywgbmEucm0gPSBUUlVFKSwNCiAgICAgICAgICAgIENvdW50ID0gbigpDQogICAgICAgICAgICApICU+JSANCiAgbXV0YXRlKHBvcC5zaXplX0NJID0gKHBvcC5zaXplX1NEIC8gc3FydChDb3VudCkpICogMS45NiwNCiAgICAgICAgIGJpcnRoc19DSSA9IChiaXJ0aHNfU0QgLyBzcXJ0KENvdW50KSkgKiAxLjk2LA0KICAgICAgICAgZGVhdGhzX0NJID0gKGRlYXRoc19TRCAvIHNxcnQoQ291bnQpKSAqIDEuOTYsDQogICAgICAgICBmcmFjLmluZm9ybWVkX0NJID0gKGZyYWMuaW5mb3JtZWRfU0QgLyBzcXJ0KENvdW50KSkgKiAxLjk2LA0KICAgICAgICAgbnVtLnNvY2lhbExlYXJuX0NJID0gKG51bS5zb2NpYWxMZWFybl9TRCAvIHNxcnQoQ291bnQpKSAqIDEuOTYsDQogICAgICAgICBudW0uYXNvY2lhbExlYXJuX0NJID0gKG51bS5hc29jaWFsTGVhcm5fU0QgLyBzcXJ0KENvdW50KSkgKiAxLjk2LA0KICAgICAgICAgdG90YWwubnVtLmludGVyYWN0aW9uc19DSSA9ICh0b3RhbC5udW0uaW50ZXJhY3Rpb25zX1NEIC8gc3FydChDb3VudCkpICogMS45NiwNCiAgICAgICAgIG1lZC5hZ2VfQ0kgPSAobWVkLmFnZV9TRCAvIHNxcnQoQ291bnQpKSAqIDEuOTYpDQoNCm5TY2VuYXJpbzwtIGRhdCAlPiUgDQogIGRpc3RpbmN0KFNjZW5hcmlvLCBNb2RlbFJ1bikgJT4lIA0KICBncm91cF9ieShTY2VuYXJpbykgJT4lIA0KICBzdW1tYXJpc2UoQ291bnQgPSBuKCkpDQoNCiMjIyMgRGV0ZXJtaW5lIG1heCB5ZWFyIGZvciBlYWNoIHJ1biAjIyMjDQptYXhZcjwtIGRhdCAlPiUgDQogIGdyb3VwX2J5KFNjZW5hcmlvLCBNb2RlbFJ1bikgJT4lIA0KICBmaWx0ZXIoeXIgPT0gbWF4KHlyLCBuYS5ybSA9IFRSVUUpKSAlPiUgDQogIG11dGF0ZShQb3BTdXJ2aXZlID0gY2FzZV93aGVuKHBvcC5zaXplIDwgMiB+ICJFeHRpcnBhdGVkIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSB+ICJTdXJ2aXZlZCIpKSAlPiUgDQogIHVuZ3JvdXAoKSAlPiUgDQogIGdyb3VwX2J5KFNjZW5hcmlvLCBQb3BTdXJ2aXZlKSAlPiUgDQogIHN1bW1hcmlzZShNZWFuID0gbWVhbih5ciwgbmEucm0gPSBUUlVFKSwNCiAgICAgICAgICAgIFNEID0gc2QoeXIsIG5hLnJtID0gVFJVRSksDQogICAgICAgICAgICBRMDMgPSBxdWFudGlsZSh5ciwgcHJvYnMgPSAwLjAzLCBuYS5ybSA9IFRSVUUpLA0KICAgICAgICAgICAgUTk3ID0gcXVhbnRpbGUoeXIsIHByb2JzID0gMC45NywgbmEucm0gPSBUUlVFKSwNCiAgICAgICAgICAgIENvdW50ID0gbigpKSAlPiUgDQogIG11dGF0ZShDSTk1ID0gKFNEIC8gc3FydChDb3VudCkpICogMS45NikgJT4lIA0KICBwaXZvdF93aWRlcihpZF9jb2xzID0gU2NlbmFyaW8sIG5hbWVzX2Zyb20gPSBQb3BTdXJ2aXZlLCB2YWx1ZXNfZnJvbSA9IGMoTWVhbiwgQ0k5NSwgUTAzLCBROTcsIENvdW50KSkNCg0KaWYoISJDb3VudF9FeHRpcnBhdGVkIiAlaW4lIG5hbWVzKG1heFlyKSl7DQogIG1heFlyPC0gbWF4WXIgJT4lIA0KICAgIG11dGF0ZShDb3VudF9FeHRpcnBhdGVkID0gMCwNCiAgICAgICAgICAgTWVhbl9FeHRpcnBhdGVkID0gMCkNCn0gDQoNCm1heFlyPC0gbWF4WXIgJT4lIA0KICBtdXRhdGUoQ291bnRfU3Vydml2ZWQgPSByZXBsYWNlX25hKENvdW50X1N1cnZpdmVkLCAwKSwNCiAgICAgICAgIENvdW50X0V4dGlycGF0ZWQgPSByZXBsYWNlX25hKENvdW50X0V4dGlycGF0ZWQsIDApKSAlPiUgDQogIG11dGF0ZShQcm9wU3Vydml2ZSA9IENvdW50X1N1cnZpdmVkIC8gKENvdW50X1N1cnZpdmVkICsgQ291bnRfRXh0aXJwYXRlZCksDQogICAgICAgICBFbmRSZXN1bHQgPSBjYXNlX3doZW4oQ291bnRfU3Vydml2ZWQgPiAwICYgQ291bnRfRXh0aXJwYXRlZCA+IDAgfiAiTWl4ZWQgUmVzdWx0IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3VudF9FeHRpcnBhdGVkID09IDAgfiAiQWxsIFN1cnZpdmVkIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3VudF9TdXJ2aXZlZCA9PSAwIH4gIkFsbCBDcmFzaGVkIikpICAlPiUgDQogIG11dGF0ZV9hdCh2YXJzKG1hdGNoZXMoYygiTWVhbl9FeHRpcnBhdGVkIiwgIk1lYW5fU3Vydml2ZWQiLCAiQ0k5NV9FeHRpcnBhdGVkIiwgIkNJOTVfU3Vydml2ZWQiLCAiUTAzX0V4dGlycGF0ZWQiLCAiUTAzX1N1cnZpdmVkIiwgIlE5N19FeHRpcnBhdGVkIiwgIlE5N19TdXJ2aXZlZCIsICJDb3VudF9FeHRpcnBhdGVkIiwgIkNvdW50X1N1cnZpdmVkIiwgIlByb3BTdXJ2aXZlIikpKSwgfiByZXBsYWNlX25hKC4sIDApKQ0KDQojIExvb3AgdGhyb3VnaCB0aGUgcm93cyBhbmQgcG9wdWxhdGUgdGhlIG1vZGVsIHBhcmFtZXRlcnMNCmdldE1vZGVsUGFyYW1zPC0gZnVuY3Rpb24oeCl7DQogIHJldHVybihmcm9tSlNPTih4KSAlPiUgDQogICAgICAgICAgIHBpdm90X3dpZGVyKG5hbWVzX2Zyb20gPSBQYXJhbWV0ZXIsIHZhbHVlc19mcm9tID0gTGV2ZWwpKQ0KfQ0KDQp0bXBQYXJhbTwtIGRhdGEuZnJhbWUoKQ0KZm9yKGkgaW4gMTpucm93KG1heFlyKSl7DQogIHRtcFBhcmFtPC0gcmJpbmQodG1wUGFyYW0sIGRhdGEuZnJhbWUoU2NlbmFyaW8gPSBtYXhZciRTY2VuYXJpb1tpXSwgZ2V0TW9kZWxQYXJhbXMobWF4WXIkU2NlbmFyaW9baV0pKSkNCn0NCg0KIyBCaW5kIHRoZSB0YWJsZXMNCm1heFlyPC0gbWF4WXIgJT4lIA0KICBsZWZ0X2pvaW4odG1wUGFyYW0sIGJ5ID0gIlNjZW5hcmlvIikNCg0KbWF4WXI8LSBtYXhZciAlPiUgDQogIG11dGF0ZShCb2xkbmVzcyA9IG9yZGVyZWQoQm9sZG5lc3MsIGMoInNrZXdMb3ciLCAic2tld01lZExvdyIsICJ1bmlmb3JtIiwgInNrZXdNZWRIaWdoIiwgInNrZXdIaWdoIikpLA0KICAgICAgICAgUG9pc0xhbWJkYSA9IG9yZGVyZWQoUG9pc0xhbWJkYSwgYygiTG93IiwgIk1lZExvdyIsICJNZWQiLCAiTWVkSGlnaCIsICJIaWdoIikpLA0KICAgICAgICAgSW5mb1RyYW5zZmVyID0gb3JkZXJlZChJbmZvVHJhbnNmZXIsIGMoIkxvdyIsICJNZWRMb3ciLCAiTWVkIiwgIk1lZEhpZ2giLCAiSGlnaCIpKSwNCiAgICAgICAgIEluZm9EZWF0aCA9IG9yZGVyZWQoSW5mb0RlYXRoLCBjKCJMb3ciLCAiTWVkTG93IiwgIk1lZCIsICJNZWRIaWdoIiwgIkhpZ2giKSksDQogICAgICAgICBOYWl2ZUxlYXJuID0gb3JkZXJlZChOYWl2ZUxlYXJuLCBjKCJMb3ciLCAiTWVkTG93IiwgIk1lZCIsICJNZWRIaWdoIiwgIkhpZ2giKSkpDQpgYGANCg0KIyMjIEJlbG93IGFyZSB0aGUga2V5cyB0byBpbnRlcnByZXRpbmcgdGhlIGRpZmZlcmVudCBwYXJhbWV0ZXIgJ2xldmVscycgb2YgZWFjaCBTY2VuYXJpby4gV2UgaGF2ZSBhIHRvdGFsIG9mIDEyLDUwMCB1bmlxdWUgU2NlbmFyaW9zDQoNCg0KYGBge3IgZWNobz1GQUxTRX0NCmthYmxlKGRLLCBjYXB0aW9uID0gIlZpdGFsIFJhdGVzLCBLIFNlbGVjdGVkIikgJT4lIA0KICBrYWJsZV9zdHlsaW5nKGZ1bGxfd2lkdGggPSBGQUxTRSwgYm9vdHN0cmFwX29wdGlvbnMgPSBjKCJzdHJpcGVkIiwgImhvdmVyIiksIGZvbnRfc2l6ZSA9IDEyKSAlPiUgDQogICByb3dfc3BlYygwLCBib2xkID0gVFJVRSkNCiMga2FibGUoZFIsIGNhcHRpb24gPSAiVml0YWwgUmF0ZXMsIFIgU2VsZWN0ZWQiKSAlPiUgDQojICAga2FibGVfc3R5bGluZyhmdWxsX3dpZHRoID0gRkFMU0UsIGJvb3RzdHJhcF9vcHRpb25zID0gYygic3RyaXBlZCIsICJob3ZlciIpLCBmb250X3NpemUgPSAxMikgJT4lIA0KIyAgICByb3dfc3BlYygwLCBib2xkID0gVFJVRSkNCg0Ka2FibGUoYm9sZERpc3QsIGNhcHRpb24gPSAiQm9sZG5lc3MgcmJldGEgU2hhcGUgUGFyYW1ldGVycyIpICU+JSANCiAga2FibGVfc3R5bGluZyhmdWxsX3dpZHRoID0gRkFMU0UsIGJvb3RzdHJhcF9vcHRpb25zID0gYygic3RyaXBlZCIsICJob3ZlciIpLCBmb250X3NpemUgPSAxMikgJT4lIA0KICAgcm93X3NwZWMoMCwgYm9sZCA9IFRSVUUpDQoNCmthYmxlKHBhcmFtcywgY2FwdGlvbiA9ICJQb2lzc29uIExhbWJkYSwgSW5mb3JtYXRpb24gVHJhbnNmZXIsIGFuZCBOYWl2ZSBMZWFybmluZyIpICU+JSANCiAga2FibGVfc3R5bGluZyhmdWxsX3dpZHRoID0gRkFMU0UsIGJvb3RzdHJhcF9vcHRpb25zID0gYygic3RyaXBlZCIsICJob3ZlciIpLCBmb250X3NpemUgPSAxMikgJT4lIA0KICAgcm93X3NwZWMoMCwgYm9sZCA9IFRSVUUpDQoNCmthYmxlKHZlcnRUcmFuc21pc3Npb24sIGNhcHRpb24gPSAiVmVydGljYWwgVHJhbnNtaXNzaW9uIikgJT4lIA0KICBrYWJsZV9zdHlsaW5nKGZ1bGxfd2lkdGggPSBGQUxTRSwgYm9vdHN0cmFwX29wdGlvbnMgPSBjKCJzdHJpcGVkIiwgImhvdmVyIiksIGZvbnRfc2l6ZSA9IDEyKSAlPiUgDQogICByb3dfc3BlYygwLCBib2xkID0gVFJVRSkNCg0KYGBgDQo8aHI+IA0KDQojIyMgQm94cGxvdHMgb24gdGhlIGdlbmVyYWwgZWZmZWN0cyBvZiBlYWNoIHBhcmFtZXRlcg0KDQojIyMjIFRoZSB4LWF4aXMgbGFiZWxzIGZvbGxvdyB0aGlzIHBhdHRlcm46ICoqJ1ZpdGFscyAtIEVuZCBSZXN1bHQgLSBQYXJhbWV0ZXIgTGV2ZWwgLSBNZWFuIFBhcmFtZXRlciBWYWx1ZSAoZm9yIHN1cnZpdmVkIGFuZCBleHRpcnBhdGVkIHJlc3VsdHMpJyoqLiBUaGlzIGlzIGFjcm9zcyBhbGwgc2NlbmFyaW9zLCB3aXRoIGVhY2ggc2NlbmFyaW8gaGF2aW5nIDUwIGl0ZXJhdGlvbnMuIFNvIHRoZXNlIGRhdGEgYXJlIGdyb3VwZWQgdG8gYSBjZXJ0YWluIGV4dGVudCB0byBwcm92aWRlIHlvdSB3aXRoIGdlbmVyYWwgcGF0dGVybnMuDQoNCmBgYHtyIGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIGZpZy5oZWlnaHQ9OX0NCmdyaWQuYXJyYW5nZSgNCm1heFlyICU+JSANCiAgZ3JvdXBfYnkoRW5kUmVzdWx0LCBWaXRhbCkgJT4lIA0KICBzdW1tYXJpc2UoQ291bnQgPSBuKCkpICU+JSANCiAgZ2dwbG90KGFlcyh4ID0gRW5kUmVzdWx0LCB5ID0gQ291bnQsIGZpbGwgPSBWaXRhbCkpICsNCiAgZ2VvbV9jb2woKSArDQogIGdndGl0bGUoIiMgb2YgU2NlbmFyaW9zIGJ5IEVuZCBSZXN1bHQgXG4gKDUwIGl0ZXJhdGlvbnMgLyBzY2VuYXJpbykiKSArDQogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpLCBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwKSksDQptYXhZciAlPiUgDQogIHNlbGVjdChTY2VuYXJpbywgTWVhbl9TdXJ2aXZlZCwgTWVhbl9FeHRpcnBhdGVkLCBWaXRhbCwgRW5kUmVzdWx0KSAlPiUgDQogIHBpdm90X2xvbmdlcihjb2xzID0gYyhNZWFuX1N1cnZpdmVkLCBNZWFuX0V4dGlycGF0ZWQpLCBuYW1lc190byA9ICJQYXJhbSIsIHZhbHVlc190byA9ICJNZWFuWWVhcnMiLCB2YWx1ZXNfZHJvcF9uYSA9IFRSVUUpICU+JSANCiAgZ2dwbG90KGFlcyh4ID0gcGFzdGUoVml0YWwsIEVuZFJlc3VsdCwgUGFyYW0pLCB5ID0gTWVhblllYXJzKSkgKw0KICBnZW9tX2JveHBsb3QoKSArDQogIGdndGl0bGUoIk1lYW4gWWVhcnMgdG8gSyBvciBDcmFzaCBieSBWaXRhbHMiKSArDQogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpLCBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwKSksDQpuY29sID0gMikNCg0KIyBCb3hwbG90IG9mIE1lYW4gWWVhcnMgdG8gQ2FycnlpbmcgY2FwYWNpdHkgYnkgVml0YWwgcmF0ZSBhbmQgQm9sZG5lc3MgbGV2ZWwNCm1heFlyICU+JSANCiAgc2VsZWN0KFNjZW5hcmlvLCBNZWFuX1N1cnZpdmVkLCBNZWFuX0V4dGlycGF0ZWQsIFZpdGFsLCBCb2xkbmVzcywgRW5kUmVzdWx0KSAlPiUgDQogIHBpdm90X2xvbmdlcihjb2xzID0gYyhNZWFuX1N1cnZpdmVkLCBNZWFuX0V4dGlycGF0ZWQpLCBuYW1lc190byA9ICJQYXJhbSIsIHZhbHVlc190byA9ICJNZWFuWWVhcnMiLCB2YWx1ZXNfZHJvcF9uYSA9IFRSVUUpICU+JSANCiAgbXV0YXRlKHhjb2wgPSBwYXN0ZShWaXRhbCwgRW5kUmVzdWx0LCBCb2xkbmVzcywgUGFyYW0pKSAlPiUgDQogIG11dGF0ZSh4Y29sID0gb3JkZXJlZCh4Y29sLCBjKCJLc2VsZWN0ZWQgQWxsIFN1cnZpdmVkIHNrZXdMb3cgTWVhbl9TdXJ2aXZlZCIsIA0KIktzZWxlY3RlZCBBbGwgU3Vydml2ZWQgc2tld01lZExvdyBNZWFuX1N1cnZpdmVkIiwgDQoiS3NlbGVjdGVkIEFsbCBTdXJ2aXZlZCB1bmlmb3JtIE1lYW5fU3Vydml2ZWQiLCANCiJLc2VsZWN0ZWQgQWxsIFN1cnZpdmVkIHNrZXdNZWRIaWdoIE1lYW5fU3Vydml2ZWQiLCANCiJLc2VsZWN0ZWQgQWxsIFN1cnZpdmVkIHNrZXdIaWdoIE1lYW5fU3Vydml2ZWQiLCANCiJLc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IHNrZXdMb3cgTWVhbl9TdXJ2aXZlZCIsIA0KIktzZWxlY3RlZCBNaXhlZCBSZXN1bHQgc2tld0xvdyBNZWFuX0V4dGlycGF0ZWQiLCANCiJLc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IHNrZXdNZWRMb3cgTWVhbl9TdXJ2aXZlZCIsIA0KIktzZWxlY3RlZCBNaXhlZCBSZXN1bHQgc2tld01lZExvdyBNZWFuX0V4dGlycGF0ZWQiLCANCiJLc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IHVuaWZvcm0gTWVhbl9TdXJ2aXZlZCIsIA0KIktzZWxlY3RlZCBNaXhlZCBSZXN1bHQgdW5pZm9ybSBNZWFuX0V4dGlycGF0ZWQiLCANCiJLc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IHNrZXdNZWRIaWdoIE1lYW5fU3Vydml2ZWQiLCANCiJLc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IHNrZXdNZWRIaWdoIE1lYW5fRXh0aXJwYXRlZCIsIA0KIktzZWxlY3RlZCBNaXhlZCBSZXN1bHQgc2tld0hpZ2ggTWVhbl9TdXJ2aXZlZCIsIA0KIktzZWxlY3RlZCBNaXhlZCBSZXN1bHQgc2tld0hpZ2ggTWVhbl9FeHRpcnBhdGVkIiwgDQoiUnNlbGVjdGVkIEFsbCBTdXJ2aXZlZCBza2V3TG93IE1lYW5fU3Vydml2ZWQiLCANCiJSc2VsZWN0ZWQgQWxsIFN1cnZpdmVkIHNrZXdMb3cgTWVhbl9FeHRpcnBhdGVkIiwNCiJSc2VsZWN0ZWQgQWxsIFN1cnZpdmVkIHNrZXdNZWRMb3cgTWVhbl9TdXJ2aXZlZCIsIA0KIlJzZWxlY3RlZCBBbGwgU3Vydml2ZWQgdW5pZm9ybSBNZWFuX1N1cnZpdmVkIiwgDQoiUnNlbGVjdGVkIEFsbCBTdXJ2aXZlZCBza2V3TWVkSGlnaCBNZWFuX1N1cnZpdmVkIiwgDQoiUnNlbGVjdGVkIEFsbCBTdXJ2aXZlZCBza2V3SGlnaCBNZWFuX1N1cnZpdmVkIiwgDQoiUnNlbGVjdGVkIE1peGVkIFJlc3VsdCBza2V3TG93IE1lYW5fU3Vydml2ZWQiLCANCiJSc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IHNrZXdMb3cgTWVhbl9FeHRpcnBhdGVkIiwgDQoiUnNlbGVjdGVkIE1peGVkIFJlc3VsdCBza2V3TWVkTG93IE1lYW5fU3Vydml2ZWQiLCANCiJSc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IHNrZXdNZWRMb3cgTWVhbl9FeHRpcnBhdGVkIiwgDQoiUnNlbGVjdGVkIE1peGVkIFJlc3VsdCB1bmlmb3JtIE1lYW5fU3Vydml2ZWQiLCANCiJSc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IHVuaWZvcm0gTWVhbl9FeHRpcnBhdGVkIiwgDQoiUnNlbGVjdGVkIE1peGVkIFJlc3VsdCBza2V3TWVkSGlnaCBNZWFuX1N1cnZpdmVkIiwgDQoiUnNlbGVjdGVkIE1peGVkIFJlc3VsdCBza2V3TWVkSGlnaCBNZWFuX0V4dGlycGF0ZWQiLCANCiJSc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IHNrZXdIaWdoIE1lYW5fU3Vydml2ZWQiLCANCiJSc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IHNrZXdIaWdoIE1lYW5fRXh0aXJwYXRlZCIsIA0KIlJzZWxlY3RlZCBBbGwgQ3Jhc2hlZCBza2V3TG93IE1lYW5fRXh0aXJwYXRlZCIsIA0KIlJzZWxlY3RlZCBBbGwgQ3Jhc2hlZCBza2V3TWVkTG93IE1lYW5fRXh0aXJwYXRlZCIsIA0KIlJzZWxlY3RlZCBBbGwgQ3Jhc2hlZCB1bmlmb3JtIE1lYW5fRXh0aXJwYXRlZCIsIA0KIlJzZWxlY3RlZCBBbGwgQ3Jhc2hlZCBza2V3TWVkSGlnaCBNZWFuX0V4dGlycGF0ZWQiLA0KIlJzZWxlY3RlZCBBbGwgQ3Jhc2hlZCBza2V3SGlnaCBNZWFuX0V4dGlycGF0ZWQiKSkpICU+JSANCiAgZ2dwbG90KGFlcyh4ID0geGNvbCwgeSA9IE1lYW5ZZWFycykpICsgDQogIGdlb21fYm94cGxvdCgpICsNCiAgZ2d0aXRsZSgiTWVhbiBZZWFycyB0byBLIG9yIENyYXNoIGJ5IEJvbGRuZXNzIikgKw0KICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSwgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCkpDQoNCiMgQm94cGxvdCBvZiBNZWFuIFllYXJzIHRvIENhcnJ5aW5nIGNhcGFjaXR5IGJ5IFZpdGFsIHJhdGUgYW5kIFBvaXNzb24gTGFtYmRhIGxldmVsDQptYXhZciAlPiUgDQogIHNlbGVjdChTY2VuYXJpbywgTWVhbl9TdXJ2aXZlZCwgTWVhbl9FeHRpcnBhdGVkLCBWaXRhbCwgUG9pc0xhbWJkYSwgRW5kUmVzdWx0KSAlPiUgDQogIHBpdm90X2xvbmdlcihjb2xzID0gYyhNZWFuX1N1cnZpdmVkLCBNZWFuX0V4dGlycGF0ZWQpLCBuYW1lc190byA9ICJQYXJhbSIsIHZhbHVlc190byA9ICJNZWFuWWVhcnMiLCB2YWx1ZXNfZHJvcF9uYSA9IFRSVUUpICU+JSANCiAgbXV0YXRlKHhjb2wgPSBwYXN0ZShWaXRhbCwgRW5kUmVzdWx0LCBQb2lzTGFtYmRhLCBQYXJhbSkpICU+JSANCiAgbXV0YXRlKHhjb2wgPSBvcmRlcmVkKHhjb2wsIGMoIktzZWxlY3RlZCBBbGwgU3Vydml2ZWQgTG93IE1lYW5fU3Vydml2ZWQiLCAiS3NlbGVjdGVkIEFsbCBTdXJ2aXZlZCBNZWRMb3cgTWVhbl9TdXJ2aXZlZCIsICJLc2VsZWN0ZWQgQWxsIFN1cnZpdmVkIE1lZCBNZWFuX1N1cnZpdmVkIiwgIktzZWxlY3RlZCBBbGwgU3Vydml2ZWQgTWVkSGlnaCBNZWFuX1N1cnZpdmVkIiwgIktzZWxlY3RlZCBBbGwgU3Vydml2ZWQgSGlnaCBNZWFuX1N1cnZpdmVkIiwgIktzZWxlY3RlZCBNaXhlZCBSZXN1bHQgTG93IE1lYW5fU3Vydml2ZWQiLCAiS3NlbGVjdGVkIE1peGVkIFJlc3VsdCBMb3cgTWVhbl9FeHRpcnBhdGVkIiwgIktzZWxlY3RlZCBNaXhlZCBSZXN1bHQgTWVkTG93IE1lYW5fU3Vydml2ZWQiLCAiS3NlbGVjdGVkIE1peGVkIFJlc3VsdCBNZWRMb3cgTWVhbl9FeHRpcnBhdGVkIiwgIktzZWxlY3RlZCBNaXhlZCBSZXN1bHQgTWVkIE1lYW5fU3Vydml2ZWQiLCAiS3NlbGVjdGVkIE1peGVkIFJlc3VsdCBNZWQgTWVhbl9FeHRpcnBhdGVkIiwgIktzZWxlY3RlZCBNaXhlZCBSZXN1bHQgTWVkSGlnaCBNZWFuX1N1cnZpdmVkIiwgIktzZWxlY3RlZCBNaXhlZCBSZXN1bHQgTWVkSGlnaCBNZWFuX0V4dGlycGF0ZWQiLCAiS3NlbGVjdGVkIE1peGVkIFJlc3VsdCBIaWdoIE1lYW5fU3Vydml2ZWQiLCAiS3NlbGVjdGVkIE1peGVkIFJlc3VsdCBIaWdoIE1lYW5fRXh0aXJwYXRlZCIsICJSc2VsZWN0ZWQgQWxsIFN1cnZpdmVkIExvdyBNZWFuX1N1cnZpdmVkIiwgIlJzZWxlY3RlZCBBbGwgU3Vydml2ZWQgTWVkTG93IE1lYW5fU3Vydml2ZWQiLCAiUnNlbGVjdGVkIEFsbCBTdXJ2aXZlZCBNZWQgTWVhbl9TdXJ2aXZlZCIsICJSc2VsZWN0ZWQgQWxsIFN1cnZpdmVkIE1lZEhpZ2ggTWVhbl9TdXJ2aXZlZCIsICJSc2VsZWN0ZWQgQWxsIFN1cnZpdmVkIEhpZ2ggTWVhbl9TdXJ2aXZlZCIsICJSc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IExvdyBNZWFuX1N1cnZpdmVkIiwgIlJzZWxlY3RlZCBNaXhlZCBSZXN1bHQgTG93IE1lYW5fRXh0aXJwYXRlZCIsICJSc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IE1lZExvdyBNZWFuX1N1cnZpdmVkIiwgIlJzZWxlY3RlZCBNaXhlZCBSZXN1bHQgTWVkTG93IE1lYW5fRXh0aXJwYXRlZCIsICJSc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IE1lZCBNZWFuX1N1cnZpdmVkIiwgIlJzZWxlY3RlZCBNaXhlZCBSZXN1bHQgTWVkIE1lYW5fRXh0aXJwYXRlZCIsICJSc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IE1lZEhpZ2ggTWVhbl9TdXJ2aXZlZCIsICJSc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IE1lZEhpZ2ggTWVhbl9FeHRpcnBhdGVkIiwgIlJzZWxlY3RlZCBNaXhlZCBSZXN1bHQgSGlnaCBNZWFuX1N1cnZpdmVkIiwgIlJzZWxlY3RlZCBNaXhlZCBSZXN1bHQgSGlnaCBNZWFuX0V4dGlycGF0ZWQiLCAiUnNlbGVjdGVkIEFsbCBDcmFzaGVkIExvdyBNZWFuX0V4dGlycGF0ZWQiLCAiUnNlbGVjdGVkIEFsbCBDcmFzaGVkIE1lZExvdyBNZWFuX0V4dGlycGF0ZWQiLCAiUnNlbGVjdGVkIEFsbCBDcmFzaGVkIE1lZCBNZWFuX0V4dGlycGF0ZWQiLCAiUnNlbGVjdGVkIEFsbCBDcmFzaGVkIE1lZEhpZ2ggTWVhbl9FeHRpcnBhdGVkIiwgIlJzZWxlY3RlZCBBbGwgQ3Jhc2hlZCBIaWdoIE1lYW5fRXh0aXJwYXRlZCIpKSkgJT4lIA0KICBnZ3Bsb3QoYWVzKHggPSB4Y29sLCB5ID0gTWVhblllYXJzKSkgKyANCiAgZ2VvbV9ib3hwbG90KCkgKw0KICBnZ3RpdGxlKCJNZWFuIFllYXJzIHRvIEsgb3IgQ3Jhc2ggYnkgUG9pc3NvbiBMYW1iZGEiKSArDQogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpLCBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwKSkNCg0KIyBCb3hwbG90IG9mIE1lYW4gWWVhcnMgdG8gQ2FycnlpbmcgY2FwYWNpdHkgYnkgVml0YWwgcmF0ZSBhbmQgSW5mb1RyYW5zZmVyIGxldmVsDQptYXhZciAlPiUgDQogIHNlbGVjdChTY2VuYXJpbywgTWVhbl9TdXJ2aXZlZCwgTWVhbl9FeHRpcnBhdGVkLCBWaXRhbCwgSW5mb1RyYW5zZmVyLCBFbmRSZXN1bHQpICU+JSANCiAgcGl2b3RfbG9uZ2VyKGNvbHMgPSBjKE1lYW5fU3Vydml2ZWQsIE1lYW5fRXh0aXJwYXRlZCksIG5hbWVzX3RvID0gIlBhcmFtIiwgdmFsdWVzX3RvID0gIk1lYW5ZZWFycyIsIHZhbHVlc19kcm9wX25hID0gVFJVRSkgJT4lIA0KICBtdXRhdGUoeGNvbCA9IHBhc3RlKFZpdGFsLCBFbmRSZXN1bHQsIEluZm9UcmFuc2ZlciwgUGFyYW0pKSAlPiUgDQogIG11dGF0ZSh4Y29sID0gb3JkZXJlZCh4Y29sLCBjKCJLc2VsZWN0ZWQgQWxsIFN1cnZpdmVkIExvdyBNZWFuX1N1cnZpdmVkIiwgIktzZWxlY3RlZCBBbGwgU3Vydml2ZWQgTWVkTG93IE1lYW5fU3Vydml2ZWQiLCAiS3NlbGVjdGVkIEFsbCBTdXJ2aXZlZCBNZWQgTWVhbl9TdXJ2aXZlZCIsICJLc2VsZWN0ZWQgQWxsIFN1cnZpdmVkIE1lZEhpZ2ggTWVhbl9TdXJ2aXZlZCIsICJLc2VsZWN0ZWQgQWxsIFN1cnZpdmVkIEhpZ2ggTWVhbl9TdXJ2aXZlZCIsICJLc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IExvdyBNZWFuX1N1cnZpdmVkIiwgIktzZWxlY3RlZCBNaXhlZCBSZXN1bHQgTG93IE1lYW5fRXh0aXJwYXRlZCIsICJLc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IE1lZExvdyBNZWFuX1N1cnZpdmVkIiwgIktzZWxlY3RlZCBNaXhlZCBSZXN1bHQgTWVkTG93IE1lYW5fRXh0aXJwYXRlZCIsICJLc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IE1lZCBNZWFuX1N1cnZpdmVkIiwgIktzZWxlY3RlZCBNaXhlZCBSZXN1bHQgTWVkIE1lYW5fRXh0aXJwYXRlZCIsICJLc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IE1lZEhpZ2ggTWVhbl9TdXJ2aXZlZCIsICJLc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IE1lZEhpZ2ggTWVhbl9FeHRpcnBhdGVkIiwgIktzZWxlY3RlZCBNaXhlZCBSZXN1bHQgSGlnaCBNZWFuX1N1cnZpdmVkIiwgIktzZWxlY3RlZCBNaXhlZCBSZXN1bHQgSGlnaCBNZWFuX0V4dGlycGF0ZWQiLCAiUnNlbGVjdGVkIEFsbCBTdXJ2aXZlZCBMb3cgTWVhbl9TdXJ2aXZlZCIsICJSc2VsZWN0ZWQgQWxsIFN1cnZpdmVkIE1lZExvdyBNZWFuX1N1cnZpdmVkIiwgIlJzZWxlY3RlZCBBbGwgU3Vydml2ZWQgTWVkIE1lYW5fU3Vydml2ZWQiLCAiUnNlbGVjdGVkIEFsbCBTdXJ2aXZlZCBNZWRIaWdoIE1lYW5fU3Vydml2ZWQiLCAiUnNlbGVjdGVkIEFsbCBTdXJ2aXZlZCBIaWdoIE1lYW5fU3Vydml2ZWQiLCAiUnNlbGVjdGVkIE1peGVkIFJlc3VsdCBMb3cgTWVhbl9TdXJ2aXZlZCIsICJSc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IExvdyBNZWFuX0V4dGlycGF0ZWQiLCAiUnNlbGVjdGVkIE1peGVkIFJlc3VsdCBNZWRMb3cgTWVhbl9TdXJ2aXZlZCIsICJSc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IE1lZExvdyBNZWFuX0V4dGlycGF0ZWQiLCAiUnNlbGVjdGVkIE1peGVkIFJlc3VsdCBNZWQgTWVhbl9TdXJ2aXZlZCIsICJSc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IE1lZCBNZWFuX0V4dGlycGF0ZWQiLCAiUnNlbGVjdGVkIE1peGVkIFJlc3VsdCBNZWRIaWdoIE1lYW5fU3Vydml2ZWQiLCAiUnNlbGVjdGVkIE1peGVkIFJlc3VsdCBNZWRIaWdoIE1lYW5fRXh0aXJwYXRlZCIsICJSc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IEhpZ2ggTWVhbl9TdXJ2aXZlZCIsICJSc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IEhpZ2ggTWVhbl9FeHRpcnBhdGVkIiwgIlJzZWxlY3RlZCBBbGwgQ3Jhc2hlZCBMb3cgTWVhbl9FeHRpcnBhdGVkIiwgIlJzZWxlY3RlZCBBbGwgQ3Jhc2hlZCBNZWRMb3cgTWVhbl9FeHRpcnBhdGVkIiwgIlJzZWxlY3RlZCBBbGwgQ3Jhc2hlZCBNZWQgTWVhbl9FeHRpcnBhdGVkIiwgIlJzZWxlY3RlZCBBbGwgQ3Jhc2hlZCBNZWRIaWdoIE1lYW5fRXh0aXJwYXRlZCIsICJSc2VsZWN0ZWQgQWxsIENyYXNoZWQgSGlnaCBNZWFuX0V4dGlycGF0ZWQiKSkpICU+JSANCiAgZ2dwbG90KGFlcyh4ID0geGNvbCwgeSA9IE1lYW5ZZWFycykpICsgDQogIGdlb21fYm94cGxvdCgpICsNCiAgZ2d0aXRsZSgiTWVhbiBZZWFycyB0byBLIG9yIENyYXNoIGJ5IEluZm9UcmFuc2ZlciIpICsNCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSksIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTApKQ0KDQojIEJveHBsb3Qgb2YgTWVhbiBZZWFycyB0byBDYXJyeWluZyBjYXBhY2l0eSBieSBWaXRhbCByYXRlIGFuZCBJbmZvRGVhdGggbGV2ZWwNCm1heFlyICU+JSANCiAgc2VsZWN0KFNjZW5hcmlvLCBNZWFuX1N1cnZpdmVkLCBNZWFuX0V4dGlycGF0ZWQsIFZpdGFsLCBJbmZvRGVhdGgsIEVuZFJlc3VsdCkgJT4lIA0KICBwaXZvdF9sb25nZXIoY29scyA9IGMoTWVhbl9TdXJ2aXZlZCwgTWVhbl9FeHRpcnBhdGVkKSwgbmFtZXNfdG8gPSAiUGFyYW0iLCB2YWx1ZXNfdG8gPSAiTWVhblllYXJzIiwgdmFsdWVzX2Ryb3BfbmEgPSBUUlVFKSAlPiUgDQogIG11dGF0ZSh4Y29sID0gcGFzdGUoVml0YWwsIEVuZFJlc3VsdCwgSW5mb0RlYXRoLCBQYXJhbSkpICU+JSANCiAgbXV0YXRlKHhjb2wgPSBvcmRlcmVkKHhjb2wsIGMoIktzZWxlY3RlZCBBbGwgU3Vydml2ZWQgTG93IE1lYW5fU3Vydml2ZWQiLCAiS3NlbGVjdGVkIEFsbCBTdXJ2aXZlZCBNZWRMb3cgTWVhbl9TdXJ2aXZlZCIsICJLc2VsZWN0ZWQgQWxsIFN1cnZpdmVkIE1lZCBNZWFuX1N1cnZpdmVkIiwgIktzZWxlY3RlZCBBbGwgU3Vydml2ZWQgTWVkSGlnaCBNZWFuX1N1cnZpdmVkIiwgIktzZWxlY3RlZCBBbGwgU3Vydml2ZWQgSGlnaCBNZWFuX1N1cnZpdmVkIiwgIktzZWxlY3RlZCBNaXhlZCBSZXN1bHQgTG93IE1lYW5fU3Vydml2ZWQiLCAiS3NlbGVjdGVkIE1peGVkIFJlc3VsdCBMb3cgTWVhbl9FeHRpcnBhdGVkIiwgIktzZWxlY3RlZCBNaXhlZCBSZXN1bHQgTWVkTG93IE1lYW5fU3Vydml2ZWQiLCAiS3NlbGVjdGVkIE1peGVkIFJlc3VsdCBNZWRMb3cgTWVhbl9FeHRpcnBhdGVkIiwgIktzZWxlY3RlZCBNaXhlZCBSZXN1bHQgTWVkIE1lYW5fU3Vydml2ZWQiLCAiS3NlbGVjdGVkIE1peGVkIFJlc3VsdCBNZWQgTWVhbl9FeHRpcnBhdGVkIiwgIktzZWxlY3RlZCBNaXhlZCBSZXN1bHQgTWVkSGlnaCBNZWFuX1N1cnZpdmVkIiwgIktzZWxlY3RlZCBNaXhlZCBSZXN1bHQgTWVkSGlnaCBNZWFuX0V4dGlycGF0ZWQiLCAiS3NlbGVjdGVkIE1peGVkIFJlc3VsdCBIaWdoIE1lYW5fU3Vydml2ZWQiLCAiS3NlbGVjdGVkIE1peGVkIFJlc3VsdCBIaWdoIE1lYW5fRXh0aXJwYXRlZCIsICJSc2VsZWN0ZWQgQWxsIFN1cnZpdmVkIExvdyBNZWFuX1N1cnZpdmVkIiwgIlJzZWxlY3RlZCBBbGwgU3Vydml2ZWQgTWVkTG93IE1lYW5fU3Vydml2ZWQiLCAiUnNlbGVjdGVkIEFsbCBTdXJ2aXZlZCBNZWQgTWVhbl9TdXJ2aXZlZCIsICJSc2VsZWN0ZWQgQWxsIFN1cnZpdmVkIE1lZEhpZ2ggTWVhbl9TdXJ2aXZlZCIsICJSc2VsZWN0ZWQgQWxsIFN1cnZpdmVkIEhpZ2ggTWVhbl9TdXJ2aXZlZCIsICJSc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IExvdyBNZWFuX1N1cnZpdmVkIiwgIlJzZWxlY3RlZCBNaXhlZCBSZXN1bHQgTG93IE1lYW5fRXh0aXJwYXRlZCIsICJSc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IE1lZExvdyBNZWFuX1N1cnZpdmVkIiwgIlJzZWxlY3RlZCBNaXhlZCBSZXN1bHQgTWVkTG93IE1lYW5fRXh0aXJwYXRlZCIsICJSc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IE1lZCBNZWFuX1N1cnZpdmVkIiwgIlJzZWxlY3RlZCBNaXhlZCBSZXN1bHQgTWVkIE1lYW5fRXh0aXJwYXRlZCIsICJSc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IE1lZEhpZ2ggTWVhbl9TdXJ2aXZlZCIsICJSc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IE1lZEhpZ2ggTWVhbl9FeHRpcnBhdGVkIiwgIlJzZWxlY3RlZCBNaXhlZCBSZXN1bHQgSGlnaCBNZWFuX1N1cnZpdmVkIiwgIlJzZWxlY3RlZCBNaXhlZCBSZXN1bHQgSGlnaCBNZWFuX0V4dGlycGF0ZWQiLCAiUnNlbGVjdGVkIEFsbCBDcmFzaGVkIExvdyBNZWFuX0V4dGlycGF0ZWQiLCAiUnNlbGVjdGVkIEFsbCBDcmFzaGVkIE1lZExvdyBNZWFuX0V4dGlycGF0ZWQiLCAiUnNlbGVjdGVkIEFsbCBDcmFzaGVkIE1lZCBNZWFuX0V4dGlycGF0ZWQiLCAiUnNlbGVjdGVkIEFsbCBDcmFzaGVkIE1lZEhpZ2ggTWVhbl9FeHRpcnBhdGVkIiwgIlJzZWxlY3RlZCBBbGwgQ3Jhc2hlZCBIaWdoIE1lYW5fRXh0aXJwYXRlZCIpKSkgJT4lIA0KICBnZ3Bsb3QoYWVzKHggPSB4Y29sLCB5ID0gTWVhblllYXJzKSkgKyANCiAgZ2VvbV9ib3hwbG90KCkgKw0KICBnZ3RpdGxlKCJNZWFuIFllYXJzIHRvIEsgb3IgQ3Jhc2ggYnkgSW5mb0RlYXRoIikgKw0KICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSwgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCkpDQoNCiMgQm94cGxvdCBvZiBNZWFuIFllYXJzIHRvIENhcnJ5aW5nIGNhcGFjaXR5IGJ5IFZpdGFsIHJhdGUgYW5kIE5haXZlTGVhcm4gbGV2ZWwNCm1heFlyICU+JSANCiAgc2VsZWN0KFNjZW5hcmlvLCBNZWFuX1N1cnZpdmVkLCBNZWFuX0V4dGlycGF0ZWQsIFZpdGFsLCBOYWl2ZUxlYXJuLCBFbmRSZXN1bHQpICU+JSANCiAgcGl2b3RfbG9uZ2VyKGNvbHMgPSBjKE1lYW5fU3Vydml2ZWQsIE1lYW5fRXh0aXJwYXRlZCksIG5hbWVzX3RvID0gIlBhcmFtIiwgdmFsdWVzX3RvID0gIk1lYW5ZZWFycyIsIHZhbHVlc19kcm9wX25hID0gVFJVRSkgJT4lIA0KICBtdXRhdGUoeGNvbCA9IHBhc3RlKFZpdGFsLCBFbmRSZXN1bHQsIE5haXZlTGVhcm4sIFBhcmFtKSkgJT4lIA0KICBtdXRhdGUoeGNvbCA9IG9yZGVyZWQoeGNvbCwgYygiS3NlbGVjdGVkIEFsbCBTdXJ2aXZlZCBMb3cgTWVhbl9TdXJ2aXZlZCIsICJLc2VsZWN0ZWQgQWxsIFN1cnZpdmVkIE1lZExvdyBNZWFuX1N1cnZpdmVkIiwgIktzZWxlY3RlZCBBbGwgU3Vydml2ZWQgTWVkIE1lYW5fU3Vydml2ZWQiLCAiS3NlbGVjdGVkIEFsbCBTdXJ2aXZlZCBNZWRIaWdoIE1lYW5fU3Vydml2ZWQiLCAiS3NlbGVjdGVkIEFsbCBTdXJ2aXZlZCBIaWdoIE1lYW5fU3Vydml2ZWQiLCAiS3NlbGVjdGVkIE1peGVkIFJlc3VsdCBMb3cgTWVhbl9TdXJ2aXZlZCIsICJLc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IExvdyBNZWFuX0V4dGlycGF0ZWQiLCAiS3NlbGVjdGVkIE1peGVkIFJlc3VsdCBNZWRMb3cgTWVhbl9TdXJ2aXZlZCIsICJLc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IE1lZExvdyBNZWFuX0V4dGlycGF0ZWQiLCAiS3NlbGVjdGVkIE1peGVkIFJlc3VsdCBNZWQgTWVhbl9TdXJ2aXZlZCIsICJLc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IE1lZCBNZWFuX0V4dGlycGF0ZWQiLCAiS3NlbGVjdGVkIE1peGVkIFJlc3VsdCBNZWRIaWdoIE1lYW5fU3Vydml2ZWQiLCAiS3NlbGVjdGVkIE1peGVkIFJlc3VsdCBNZWRIaWdoIE1lYW5fRXh0aXJwYXRlZCIsICJLc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IEhpZ2ggTWVhbl9TdXJ2aXZlZCIsICJLc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IEhpZ2ggTWVhbl9FeHRpcnBhdGVkIiwgIlJzZWxlY3RlZCBBbGwgU3Vydml2ZWQgTG93IE1lYW5fU3Vydml2ZWQiLCAiUnNlbGVjdGVkIEFsbCBTdXJ2aXZlZCBNZWRMb3cgTWVhbl9TdXJ2aXZlZCIsICJSc2VsZWN0ZWQgQWxsIFN1cnZpdmVkIE1lZCBNZWFuX1N1cnZpdmVkIiwgIlJzZWxlY3RlZCBBbGwgU3Vydml2ZWQgTWVkSGlnaCBNZWFuX1N1cnZpdmVkIiwgIlJzZWxlY3RlZCBBbGwgU3Vydml2ZWQgSGlnaCBNZWFuX1N1cnZpdmVkIiwgIlJzZWxlY3RlZCBNaXhlZCBSZXN1bHQgTG93IE1lYW5fU3Vydml2ZWQiLCAiUnNlbGVjdGVkIE1peGVkIFJlc3VsdCBMb3cgTWVhbl9FeHRpcnBhdGVkIiwgIlJzZWxlY3RlZCBNaXhlZCBSZXN1bHQgTWVkTG93IE1lYW5fU3Vydml2ZWQiLCAiUnNlbGVjdGVkIE1peGVkIFJlc3VsdCBNZWRMb3cgTWVhbl9FeHRpcnBhdGVkIiwgIlJzZWxlY3RlZCBNaXhlZCBSZXN1bHQgTWVkIE1lYW5fU3Vydml2ZWQiLCAiUnNlbGVjdGVkIE1peGVkIFJlc3VsdCBNZWQgTWVhbl9FeHRpcnBhdGVkIiwgIlJzZWxlY3RlZCBNaXhlZCBSZXN1bHQgTWVkSGlnaCBNZWFuX1N1cnZpdmVkIiwgIlJzZWxlY3RlZCBNaXhlZCBSZXN1bHQgTWVkSGlnaCBNZWFuX0V4dGlycGF0ZWQiLCAiUnNlbGVjdGVkIE1peGVkIFJlc3VsdCBIaWdoIE1lYW5fU3Vydml2ZWQiLCAiUnNlbGVjdGVkIE1peGVkIFJlc3VsdCBIaWdoIE1lYW5fRXh0aXJwYXRlZCIsICJSc2VsZWN0ZWQgQWxsIENyYXNoZWQgTG93IE1lYW5fRXh0aXJwYXRlZCIsICJSc2VsZWN0ZWQgQWxsIENyYXNoZWQgTWVkTG93IE1lYW5fRXh0aXJwYXRlZCIsICJSc2VsZWN0ZWQgQWxsIENyYXNoZWQgTWVkIE1lYW5fRXh0aXJwYXRlZCIsICJSc2VsZWN0ZWQgQWxsIENyYXNoZWQgTWVkSGlnaCBNZWFuX0V4dGlycGF0ZWQiLCAiUnNlbGVjdGVkIEFsbCBDcmFzaGVkIEhpZ2ggTWVhbl9FeHRpcnBhdGVkIikpKSAlPiUgDQogIGdncGxvdChhZXMoeCA9IHhjb2wsIHkgPSBNZWFuWWVhcnMpKSArIA0KICBnZW9tX2JveHBsb3QoKSArDQogIGdndGl0bGUoIk1lYW4gWWVhcnMgdG8gSyBvciBDcmFzaCBieSBOYWl2ZUxlYXJuIikgKw0KICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSwgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCkpDQoNCiMgQm94cGxvdCBvZiBNZWFuIFllYXJzIHRvIENhcnJ5aW5nIGNhcGFjaXR5IGJ5IFZpdGFsIHJhdGUgYW5kIFZlcnRpY2FsIFRyYW5zZmVyIGxldmVsDQptYXhZciAlPiUgDQogIHNlbGVjdChTY2VuYXJpbywgTWVhbl9TdXJ2aXZlZCwgTWVhbl9FeHRpcnBhdGVkLCBWaXRhbCwgVmVydFRyYW5zLCBFbmRSZXN1bHQpICU+JSANCiAgcGl2b3RfbG9uZ2VyKGNvbHMgPSBjKE1lYW5fU3Vydml2ZWQsIE1lYW5fRXh0aXJwYXRlZCksIG5hbWVzX3RvID0gIlBhcmFtIiwgdmFsdWVzX3RvID0gIk1lYW5ZZWFycyIsIHZhbHVlc19kcm9wX25hID0gVFJVRSkgJT4lIA0KICBtdXRhdGUoeGNvbCA9IHBhc3RlKFZpdGFsLCBFbmRSZXN1bHQsIFZlcnRUcmFucywgUGFyYW0pKSAlPiUgDQogIG11dGF0ZSh4Y29sID0gb3JkZXJlZCh4Y29sLCBjKCJLc2VsZWN0ZWQgQWxsIFN1cnZpdmVkIEZhbHNlIE1lYW5fU3Vydml2ZWQiLCAiS3NlbGVjdGVkIEFsbCBTdXJ2aXZlZCBUcnVlIE1lYW5fU3Vydml2ZWQiLCAiS3NlbGVjdGVkIE1peGVkIFJlc3VsdCBGYWxzZSBNZWFuX1N1cnZpdmVkIiwgIktzZWxlY3RlZCBNaXhlZCBSZXN1bHQgRmFsc2UgTWVhbl9FeHRpcnBhdGVkIiwgIktzZWxlY3RlZCBNaXhlZCBSZXN1bHQgVHJ1ZSBNZWFuX1N1cnZpdmVkIiwgIktzZWxlY3RlZCBNaXhlZCBSZXN1bHQgVHJ1ZSBNZWFuX0V4dGlycGF0ZWQiLCAiUnNlbGVjdGVkIEFsbCBTdXJ2aXZlZCBGYWxzZSBNZWFuX1N1cnZpdmVkIiwgIlJzZWxlY3RlZCBBbGwgU3Vydml2ZWQgVHJ1ZSBNZWFuX1N1cnZpdmVkIiwgIlJzZWxlY3RlZCBNaXhlZCBSZXN1bHQgRmFsc2UgTWVhbl9TdXJ2aXZlZCIsICJSc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IEZhbHNlIE1lYW5fRXh0aXJwYXRlZCIsICJSc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IFRydWUgTWVhbl9TdXJ2aXZlZCIsICJSc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IFRydWUgTWVhbl9FeHRpcnBhdGVkIiwgIlJzZWxlY3RlZCBBbGwgQ3Jhc2hlZCBGYWxzZSBNZWFuX0V4dGlycGF0ZWQiLCAiUnNlbGVjdGVkIEFsbCBDcmFzaGVkIFRydWUgTWVhbl9FeHRpcnBhdGVkIikpKSAlPiUgDQogIGdncGxvdChhZXMoeCA9IHhjb2wsIHkgPSBNZWFuWWVhcnMpKSArIA0KICBnZW9tX2JveHBsb3QoKSArDQogIGdndGl0bGUoIk1lYW4gWWVhcnMgdG8gSyBvciBDcmFzaCBieSBWZXJ0aWNhbCBUcmFuc2ZlciIpICsNCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSksIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTApKQ0KDQpgYGANCg0KIyMjIEF0dGVtcHQgdG8gdHJ5IGFuZCBxdWFudGlmeSB0aGUgcmVzdWx0cyBvZiB0aGUgYWJvdmUgcGxvdHMNCg0KQnkgdGFraW5nIHRoZSBzYW1lIGRhdGEgdGhlIHRoZSBCb3ggUGxvdHMgYXJlIGJhc2VkIG9mZiBvZiwgSSBmaXQgaW5kaXZpZHVhbCBsaW5lYXIgbW9kZWxzIChBTk9WQSkgdG8gZWFjaCBkYXRhc2V0LCBpbiB0aGUgZm9yIG9mICpNZWFuWWVhcnMgfiBTY2VuYXJpbyouIEkgdGhlbiBjYXB0dXJlZCB0aGUgRXN0aW1hdGVzIGZvciBlYWNoIFNjZW5hcmlvIGludG8gYSB0YWJsZSBhbmQgZWFjaCBjb2x1bW4gaXMgdGhlIG1vZGVsIHBhcmFtZXRlciBlc3RpbWF0ZSBmb3IgdGhlIHNjZW5hcmlvIGdpdmVuIHRoYXQgcGFyYW1ldGVyLiBUaGlzIHdhcyB0aGUgZmlyc3QgbWV0aG9kIHRoYXQgcG9wcGVkIGludG8gbXkgaGVhZCB0byB0cnkgYW5kIGNvbXBhcmUgZWZmZWN0IHNpemVzIGJldHdlZW4gZGlmZmVyZW50IElCTSBwYXJhbWV0ZXJzLiBJIHRoZW4gcGVyZm9ybWVkIGEgY29tcGxldGUgUGFpcndpc2UgQ29udHJhc3QgYmV0d2VlbiBhbGwgc2NlbmFyaW9zIHdpdGhpbiBhIHBhcmFtZXRlciBtb2RlbC4gVGhlIHNjYXR0ZXIgcGxvdHMgYmVsb3cgYXJlIHNvbWUgZ3JhcGhpY2FsIHJlcHJlc2VudGF0aW9ucyBvZiB0aGUgY292YXJpYXRpb24gYmV0d2VlbiB0d28gSUJNIHBhcmFtZXRlcnMgaW4gKipFZmZlY3Qtc2l6ZSBTcGFjZSoqLiBJIGhvcGUgdGhpcyBtYWtlcyBzZW5zZSBhbmQgaXMgc29tZXdoYXQgdXNlZnVsLiBBbGwgcGFyYW1ldGVycyBzZWVtcyB0byBjb3ZhcnkgcG9zaXRpdmVseSB3aXRoIHRoZSBvdGhlcnMsIGJ1dCB0aGVyZSBhcmUgc29tZSBwYXR0ZXJucyB3aGVuIHlvdSBsb29rIGFjcm9zcyB0aGUgSyB2cyBSIHNlbGVjdGVkIHNwYWNlIGFuZCB3aGV0aGVyIHRoZSBtb2RlbCBwb3B1bGF0aW9ucyBzdXJ2aXZlZCBvciB3ZXJlIGV4dGlycGF0ZWQuIFRoZSBwbG90cyBhcmUgZHluYW1pYywgc28geW91IGNhbiB0dXJuIG9uL29mZiBlYWNoIHBvaW50IGJ5IGRvdWJsZS1jbGlja2luZyBpbiB0aGUgbGVnZW5kIGFuZCBob3ZlciBhbGxvd3MgeW91IHRvIHNlZSB2YWx1ZXMuIA0KDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCBmaWcuaGVpZ2h0PTksIGZpZy53aWR0aD05fQ0KaWJtQm9sZDwtIG1heFlyICU+JSANCiAgc2VsZWN0KFNjZW5hcmlvLCBNZWFuX1N1cnZpdmVkLCBNZWFuX0V4dGlycGF0ZWQsIFZpdGFsLCBCb2xkbmVzcywgRW5kUmVzdWx0KSAlPiUgDQogIHBpdm90X2xvbmdlcihjb2xzID0gYyhNZWFuX1N1cnZpdmVkLCBNZWFuX0V4dGlycGF0ZWQpLCBuYW1lc190byA9ICJQYXJhbSIsIHZhbHVlc190byA9ICJNZWFuWWVhcnMiLCB2YWx1ZXNfZHJvcF9uYSA9IFRSVUUpICU+JSANCiAgbXV0YXRlKHhjb2wgPSBwYXN0ZShWaXRhbCwgRW5kUmVzdWx0LCBCb2xkbmVzcywgUGFyYW0pKSAlPiUgDQogIG11dGF0ZSh4Y29sID0gb3JkZXJlZCh4Y29sLCBjKCJLc2VsZWN0ZWQgQWxsIFN1cnZpdmVkIHNrZXdMb3cgTWVhbl9TdXJ2aXZlZCIsIA0KIktzZWxlY3RlZCBBbGwgU3Vydml2ZWQgc2tld01lZExvdyBNZWFuX1N1cnZpdmVkIiwgDQoiS3NlbGVjdGVkIEFsbCBTdXJ2aXZlZCB1bmlmb3JtIE1lYW5fU3Vydml2ZWQiLCANCiJLc2VsZWN0ZWQgQWxsIFN1cnZpdmVkIHNrZXdNZWRIaWdoIE1lYW5fU3Vydml2ZWQiLCANCiJLc2VsZWN0ZWQgQWxsIFN1cnZpdmVkIHNrZXdIaWdoIE1lYW5fU3Vydml2ZWQiLCANCiJLc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IHNrZXdMb3cgTWVhbl9TdXJ2aXZlZCIsIA0KIktzZWxlY3RlZCBNaXhlZCBSZXN1bHQgc2tld0xvdyBNZWFuX0V4dGlycGF0ZWQiLCANCiJLc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IHNrZXdNZWRMb3cgTWVhbl9TdXJ2aXZlZCIsIA0KIktzZWxlY3RlZCBNaXhlZCBSZXN1bHQgc2tld01lZExvdyBNZWFuX0V4dGlycGF0ZWQiLCANCiJLc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IHVuaWZvcm0gTWVhbl9TdXJ2aXZlZCIsIA0KIktzZWxlY3RlZCBNaXhlZCBSZXN1bHQgdW5pZm9ybSBNZWFuX0V4dGlycGF0ZWQiLCANCiJLc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IHNrZXdNZWRIaWdoIE1lYW5fU3Vydml2ZWQiLCANCiJLc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IHNrZXdNZWRIaWdoIE1lYW5fRXh0aXJwYXRlZCIsIA0KIktzZWxlY3RlZCBNaXhlZCBSZXN1bHQgc2tld0hpZ2ggTWVhbl9TdXJ2aXZlZCIsIA0KIktzZWxlY3RlZCBNaXhlZCBSZXN1bHQgc2tld0hpZ2ggTWVhbl9FeHRpcnBhdGVkIiwgDQoiUnNlbGVjdGVkIEFsbCBTdXJ2aXZlZCBza2V3TG93IE1lYW5fU3Vydml2ZWQiLCANCiJSc2VsZWN0ZWQgQWxsIFN1cnZpdmVkIHNrZXdNZWRMb3cgTWVhbl9TdXJ2aXZlZCIsIA0KIlJzZWxlY3RlZCBBbGwgU3Vydml2ZWQgdW5pZm9ybSBNZWFuX1N1cnZpdmVkIiwgDQoiUnNlbGVjdGVkIEFsbCBTdXJ2aXZlZCBza2V3TWVkSGlnaCBNZWFuX1N1cnZpdmVkIiwgDQoiUnNlbGVjdGVkIEFsbCBTdXJ2aXZlZCBza2V3SGlnaCBNZWFuX1N1cnZpdmVkIiwgDQoiUnNlbGVjdGVkIE1peGVkIFJlc3VsdCBza2V3TG93IE1lYW5fU3Vydml2ZWQiLCANCiJSc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IHNrZXdMb3cgTWVhbl9FeHRpcnBhdGVkIiwgDQoiUnNlbGVjdGVkIE1peGVkIFJlc3VsdCBza2V3TWVkTG93IE1lYW5fU3Vydml2ZWQiLCANCiJSc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IHNrZXdNZWRMb3cgTWVhbl9FeHRpcnBhdGVkIiwgDQoiUnNlbGVjdGVkIE1peGVkIFJlc3VsdCB1bmlmb3JtIE1lYW5fU3Vydml2ZWQiLCANCiJSc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IHVuaWZvcm0gTWVhbl9FeHRpcnBhdGVkIiwgDQoiUnNlbGVjdGVkIE1peGVkIFJlc3VsdCBza2V3TWVkSGlnaCBNZWFuX1N1cnZpdmVkIiwgDQoiUnNlbGVjdGVkIE1peGVkIFJlc3VsdCBza2V3TWVkSGlnaCBNZWFuX0V4dGlycGF0ZWQiLCANCiJSc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IHNrZXdIaWdoIE1lYW5fU3Vydml2ZWQiLCANCiJSc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IHNrZXdIaWdoIE1lYW5fRXh0aXJwYXRlZCIsIA0KIlJzZWxlY3RlZCBBbGwgQ3Jhc2hlZCBza2V3TG93IE1lYW5fRXh0aXJwYXRlZCIsIA0KIlJzZWxlY3RlZCBBbGwgQ3Jhc2hlZCBza2V3TWVkTG93IE1lYW5fRXh0aXJwYXRlZCIsIA0KIlJzZWxlY3RlZCBBbGwgQ3Jhc2hlZCB1bmlmb3JtIE1lYW5fRXh0aXJwYXRlZCIsIA0KIlJzZWxlY3RlZCBBbGwgQ3Jhc2hlZCBza2V3TWVkSGlnaCBNZWFuX0V4dGlycGF0ZWQiLA0KIlJzZWxlY3RlZCBBbGwgQ3Jhc2hlZCBza2V3SGlnaCBNZWFuX0V4dGlycGF0ZWQiKSkpIA0KDQojIEZpdCBhIG1vZGVsDQptb2RCb2xkPC0gYW92KE1lYW5ZZWFycyB+IHhjb2wsIGRhdGEgPSBpYm1Cb2xkKQ0KIyBHZXQgcGFpcndpc2UgY29udHJhc3RzIG9mIGVhY2ggc2NlbmFyaW8NCmNvbkJvbGRQYWlyPC0gc3VtbWFyeShwYWlycyhhcy5lbW1HcmlkKGFzLmxpc3QocmVmX2dyaWQobW9kQm9sZCkpKSkpICU+JSANCiAgcmVuYW1lKGVzdGltYXRlX0JvbGQgPSBlc3RpbWF0ZSwNCiAgICAgICAgIHAudmFsdWVfQm9sZCA9IHAudmFsdWUpICU+JSANCiAgbXV0YXRlKGNvbnRyYXN0ID0gc3RyX3JlcGxhY2VfYWxsKGNvbnRyYXN0LCBwYXR0ZXJuID0gInNrZXciLCByZXBsYWNlbWVudCA9ICIiKSkgJT4lIA0KICBtdXRhdGUoY29udHJhc3QgPSBzdHJfcmVwbGFjZV9hbGwoY29udHJhc3QsIHBhdHRlcm4gPSAidW5pZm9ybSIsIHJlcGxhY2VtZW50ID0gIk1lZCIpKQ0KIyBHZXQgbW9kZWwgZXN0aW1hdGVzIG9mIGVhY2ggc2NlbmFyaW8NCmNvbkJvbGQ8LSBzdW1tYXJ5KGNvbnRyYXN0KGFzLmVtbUdyaWQoYXMubGlzdChyZWZfZ3JpZChtb2RCb2xkKSkpKSkgJT4lIA0KICAgcmVuYW1lKGVzdGltYXRlX0JvbGQgPSBlc3RpbWF0ZSwNCiAgICAgICAgIHAudmFsdWVfQm9sZCA9IHAudmFsdWUpICU+JSANCiAgbXV0YXRlKGNvbnRyYXN0ID0gc3RyX3JlcGxhY2VfYWxsKGNvbnRyYXN0LCBwYXR0ZXJuID0gInNrZXciLCByZXBsYWNlbWVudCA9ICIiKSkgJT4lIA0KICBtdXRhdGUoY29udHJhc3QgPSBzdHJfcmVwbGFjZV9hbGwoY29udHJhc3QsIHBhdHRlcm4gPSAidW5pZm9ybSIsIHJlcGxhY2VtZW50ID0gIk1lZCIpKQ0KDQppYm1MYW1iZGE8LSBtYXhZciAlPiUgDQogIHNlbGVjdChTY2VuYXJpbywgTWVhbl9TdXJ2aXZlZCwgTWVhbl9FeHRpcnBhdGVkLCBWaXRhbCwgUG9pc0xhbWJkYSwgRW5kUmVzdWx0KSAlPiUgDQogIHBpdm90X2xvbmdlcihjb2xzID0gYyhNZWFuX1N1cnZpdmVkLCBNZWFuX0V4dGlycGF0ZWQpLCBuYW1lc190byA9ICJQYXJhbSIsIHZhbHVlc190byA9ICJNZWFuWWVhcnMiLCB2YWx1ZXNfZHJvcF9uYSA9IFRSVUUpICU+JSANCiAgbXV0YXRlKHhjb2wgPSBwYXN0ZShWaXRhbCwgRW5kUmVzdWx0LCBQb2lzTGFtYmRhLCBQYXJhbSkpICU+JSANCiAgbXV0YXRlKHhjb2wgPSBvcmRlcmVkKHhjb2wsIGMoIktzZWxlY3RlZCBBbGwgU3Vydml2ZWQgTG93IE1lYW5fU3Vydml2ZWQiLCAiS3NlbGVjdGVkIEFsbCBTdXJ2aXZlZCBNZWRMb3cgTWVhbl9TdXJ2aXZlZCIsICJLc2VsZWN0ZWQgQWxsIFN1cnZpdmVkIE1lZCBNZWFuX1N1cnZpdmVkIiwgIktzZWxlY3RlZCBBbGwgU3Vydml2ZWQgTWVkSGlnaCBNZWFuX1N1cnZpdmVkIiwgIktzZWxlY3RlZCBBbGwgU3Vydml2ZWQgSGlnaCBNZWFuX1N1cnZpdmVkIiwgIktzZWxlY3RlZCBNaXhlZCBSZXN1bHQgTG93IE1lYW5fU3Vydml2ZWQiLCAiS3NlbGVjdGVkIE1peGVkIFJlc3VsdCBMb3cgTWVhbl9FeHRpcnBhdGVkIiwgIktzZWxlY3RlZCBNaXhlZCBSZXN1bHQgTWVkTG93IE1lYW5fU3Vydml2ZWQiLCAiS3NlbGVjdGVkIE1peGVkIFJlc3VsdCBNZWRMb3cgTWVhbl9FeHRpcnBhdGVkIiwgIktzZWxlY3RlZCBNaXhlZCBSZXN1bHQgTWVkIE1lYW5fU3Vydml2ZWQiLCAiS3NlbGVjdGVkIE1peGVkIFJlc3VsdCBNZWQgTWVhbl9FeHRpcnBhdGVkIiwgIktzZWxlY3RlZCBNaXhlZCBSZXN1bHQgTWVkSGlnaCBNZWFuX1N1cnZpdmVkIiwgIktzZWxlY3RlZCBNaXhlZCBSZXN1bHQgTWVkSGlnaCBNZWFuX0V4dGlycGF0ZWQiLCAiS3NlbGVjdGVkIE1peGVkIFJlc3VsdCBIaWdoIE1lYW5fU3Vydml2ZWQiLCAiS3NlbGVjdGVkIE1peGVkIFJlc3VsdCBIaWdoIE1lYW5fRXh0aXJwYXRlZCIsICJSc2VsZWN0ZWQgQWxsIFN1cnZpdmVkIExvdyBNZWFuX1N1cnZpdmVkIiwgIlJzZWxlY3RlZCBBbGwgU3Vydml2ZWQgTWVkTG93IE1lYW5fU3Vydml2ZWQiLCAiUnNlbGVjdGVkIEFsbCBTdXJ2aXZlZCBNZWQgTWVhbl9TdXJ2aXZlZCIsICJSc2VsZWN0ZWQgQWxsIFN1cnZpdmVkIE1lZEhpZ2ggTWVhbl9TdXJ2aXZlZCIsICJSc2VsZWN0ZWQgQWxsIFN1cnZpdmVkIEhpZ2ggTWVhbl9TdXJ2aXZlZCIsICJSc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IExvdyBNZWFuX1N1cnZpdmVkIiwgIlJzZWxlY3RlZCBNaXhlZCBSZXN1bHQgTG93IE1lYW5fRXh0aXJwYXRlZCIsICJSc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IE1lZExvdyBNZWFuX1N1cnZpdmVkIiwgIlJzZWxlY3RlZCBNaXhlZCBSZXN1bHQgTWVkTG93IE1lYW5fRXh0aXJwYXRlZCIsICJSc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IE1lZCBNZWFuX1N1cnZpdmVkIiwgIlJzZWxlY3RlZCBNaXhlZCBSZXN1bHQgTWVkIE1lYW5fRXh0aXJwYXRlZCIsICJSc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IE1lZEhpZ2ggTWVhbl9TdXJ2aXZlZCIsICJSc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IE1lZEhpZ2ggTWVhbl9FeHRpcnBhdGVkIiwgIlJzZWxlY3RlZCBNaXhlZCBSZXN1bHQgSGlnaCBNZWFuX1N1cnZpdmVkIiwgIlJzZWxlY3RlZCBNaXhlZCBSZXN1bHQgSGlnaCBNZWFuX0V4dGlycGF0ZWQiLCAiUnNlbGVjdGVkIEFsbCBDcmFzaGVkIExvdyBNZWFuX0V4dGlycGF0ZWQiLCAiUnNlbGVjdGVkIEFsbCBDcmFzaGVkIE1lZExvdyBNZWFuX0V4dGlycGF0ZWQiLCAiUnNlbGVjdGVkIEFsbCBDcmFzaGVkIE1lZCBNZWFuX0V4dGlycGF0ZWQiLCAiUnNlbGVjdGVkIEFsbCBDcmFzaGVkIE1lZEhpZ2ggTWVhbl9FeHRpcnBhdGVkIiwgIlJzZWxlY3RlZCBBbGwgQ3Jhc2hlZCBIaWdoIE1lYW5fRXh0aXJwYXRlZCIpKSkNCg0KIyBGaXQgYSBtb2RlbA0KbW9kTGFtYmRhPC0gYW92KE1lYW5ZZWFycyB+IHhjb2wsIGRhdGEgPSBpYm1MYW1iZGEpDQojIEdldCBwYWlyd2lzZSBjb250cmFzdHMgb2YgZWFjaCBzY2VuYXJpbw0KY29uTGFtYmRhUGFpcjwtIHN1bW1hcnkocGFpcnMoYXMuZW1tR3JpZChhcy5saXN0KHJlZl9ncmlkKG1vZExhbWJkYSkpKSkpICU+JSANCiAgcmVuYW1lKGVzdGltYXRlX0xhbWJkYSA9IGVzdGltYXRlLA0KICAgICAgICAgcC52YWx1ZV9MYW1iZGEgPSBwLnZhbHVlKQ0KIyBHZXQgbW9kZWwgZXN0aW1hdGVzIG9mIGVhY2ggc2NlbmFyaW8NCmNvbkxhbWJkYTwtIHN1bW1hcnkoY29udHJhc3QoYXMuZW1tR3JpZChhcy5saXN0KHJlZl9ncmlkKG1vZExhbWJkYSkpKSkpICU+JSANCiAgIHJlbmFtZShlc3RpbWF0ZV9MYW1iZGEgPSBlc3RpbWF0ZSwNCiAgICAgICAgIHAudmFsdWVfTGFtYmRhID0gcC52YWx1ZSkNCg0KIyBCb3hwbG90IG9mIE1lYW4gWWVhcnMgdG8gQ2FycnlpbmcgY2FwYWNpdHkgYnkgVml0YWwgcmF0ZSBhbmQgSW5mb1RyYW5zZmVyIGxldmVsDQppYm1JbmZvVHJhbjwtIG1heFlyICU+JSANCiAgc2VsZWN0KFNjZW5hcmlvLCBNZWFuX1N1cnZpdmVkLCBNZWFuX0V4dGlycGF0ZWQsIFZpdGFsLCBJbmZvVHJhbnNmZXIsIEVuZFJlc3VsdCkgJT4lIA0KICBwaXZvdF9sb25nZXIoY29scyA9IGMoTWVhbl9TdXJ2aXZlZCwgTWVhbl9FeHRpcnBhdGVkKSwgbmFtZXNfdG8gPSAiUGFyYW0iLCB2YWx1ZXNfdG8gPSAiTWVhblllYXJzIiwgdmFsdWVzX2Ryb3BfbmEgPSBUUlVFKSAlPiUgDQogIG11dGF0ZSh4Y29sID0gcGFzdGUoVml0YWwsIEVuZFJlc3VsdCwgSW5mb1RyYW5zZmVyLCBQYXJhbSkpICU+JSANCiAgbXV0YXRlKHhjb2wgPSBvcmRlcmVkKHhjb2wsIGMoIktzZWxlY3RlZCBBbGwgU3Vydml2ZWQgTG93IE1lYW5fU3Vydml2ZWQiLCAiS3NlbGVjdGVkIEFsbCBTdXJ2aXZlZCBNZWRMb3cgTWVhbl9TdXJ2aXZlZCIsICJLc2VsZWN0ZWQgQWxsIFN1cnZpdmVkIE1lZCBNZWFuX1N1cnZpdmVkIiwgIktzZWxlY3RlZCBBbGwgU3Vydml2ZWQgTWVkSGlnaCBNZWFuX1N1cnZpdmVkIiwgIktzZWxlY3RlZCBBbGwgU3Vydml2ZWQgSGlnaCBNZWFuX1N1cnZpdmVkIiwgIktzZWxlY3RlZCBNaXhlZCBSZXN1bHQgTG93IE1lYW5fU3Vydml2ZWQiLCAiS3NlbGVjdGVkIE1peGVkIFJlc3VsdCBMb3cgTWVhbl9FeHRpcnBhdGVkIiwgIktzZWxlY3RlZCBNaXhlZCBSZXN1bHQgTWVkTG93IE1lYW5fU3Vydml2ZWQiLCAiS3NlbGVjdGVkIE1peGVkIFJlc3VsdCBNZWRMb3cgTWVhbl9FeHRpcnBhdGVkIiwgIktzZWxlY3RlZCBNaXhlZCBSZXN1bHQgTWVkIE1lYW5fU3Vydml2ZWQiLCAiS3NlbGVjdGVkIE1peGVkIFJlc3VsdCBNZWQgTWVhbl9FeHRpcnBhdGVkIiwgIktzZWxlY3RlZCBNaXhlZCBSZXN1bHQgTWVkSGlnaCBNZWFuX1N1cnZpdmVkIiwgIktzZWxlY3RlZCBNaXhlZCBSZXN1bHQgTWVkSGlnaCBNZWFuX0V4dGlycGF0ZWQiLCAiS3NlbGVjdGVkIE1peGVkIFJlc3VsdCBIaWdoIE1lYW5fU3Vydml2ZWQiLCAiS3NlbGVjdGVkIE1peGVkIFJlc3VsdCBIaWdoIE1lYW5fRXh0aXJwYXRlZCIsICJSc2VsZWN0ZWQgQWxsIFN1cnZpdmVkIExvdyBNZWFuX1N1cnZpdmVkIiwgIlJzZWxlY3RlZCBBbGwgU3Vydml2ZWQgTWVkTG93IE1lYW5fU3Vydml2ZWQiLCAiUnNlbGVjdGVkIEFsbCBTdXJ2aXZlZCBNZWQgTWVhbl9TdXJ2aXZlZCIsICJSc2VsZWN0ZWQgQWxsIFN1cnZpdmVkIE1lZEhpZ2ggTWVhbl9TdXJ2aXZlZCIsICJSc2VsZWN0ZWQgQWxsIFN1cnZpdmVkIEhpZ2ggTWVhbl9TdXJ2aXZlZCIsICJSc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IExvdyBNZWFuX1N1cnZpdmVkIiwgIlJzZWxlY3RlZCBNaXhlZCBSZXN1bHQgTG93IE1lYW5fRXh0aXJwYXRlZCIsICJSc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IE1lZExvdyBNZWFuX1N1cnZpdmVkIiwgIlJzZWxlY3RlZCBNaXhlZCBSZXN1bHQgTWVkTG93IE1lYW5fRXh0aXJwYXRlZCIsICJSc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IE1lZCBNZWFuX1N1cnZpdmVkIiwgIlJzZWxlY3RlZCBNaXhlZCBSZXN1bHQgTWVkIE1lYW5fRXh0aXJwYXRlZCIsICJSc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IE1lZEhpZ2ggTWVhbl9TdXJ2aXZlZCIsICJSc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IE1lZEhpZ2ggTWVhbl9FeHRpcnBhdGVkIiwgIlJzZWxlY3RlZCBNaXhlZCBSZXN1bHQgSGlnaCBNZWFuX1N1cnZpdmVkIiwgIlJzZWxlY3RlZCBNaXhlZCBSZXN1bHQgSGlnaCBNZWFuX0V4dGlycGF0ZWQiLCAiUnNlbGVjdGVkIEFsbCBDcmFzaGVkIExvdyBNZWFuX0V4dGlycGF0ZWQiLCAiUnNlbGVjdGVkIEFsbCBDcmFzaGVkIE1lZExvdyBNZWFuX0V4dGlycGF0ZWQiLCAiUnNlbGVjdGVkIEFsbCBDcmFzaGVkIE1lZCBNZWFuX0V4dGlycGF0ZWQiLCAiUnNlbGVjdGVkIEFsbCBDcmFzaGVkIE1lZEhpZ2ggTWVhbl9FeHRpcnBhdGVkIiwgIlJzZWxlY3RlZCBBbGwgQ3Jhc2hlZCBIaWdoIE1lYW5fRXh0aXJwYXRlZCIpKSkNCg0KIyBGaXQgYSBtb2RlbA0KbW9kSW5mb1RyYW48LSBhb3YoTWVhblllYXJzIH4geGNvbCwgZGF0YSA9IGlibUluZm9UcmFuKQ0KIyBHZXQgcGFpcndpc2UgY29udHJhc3RzIG9mIGVhY2ggc2NlbmFyaW8NCmNvbkluZm9UcmFuUGFpcjwtIHN1bW1hcnkocGFpcnMoYXMuZW1tR3JpZChhcy5saXN0KHJlZl9ncmlkKG1vZEluZm9UcmFuKSkpKSkgJT4lIA0KICByZW5hbWUoZXN0aW1hdGVfSW5mb1RyYW4gPSBlc3RpbWF0ZSwNCiAgICAgICAgIHAudmFsdWVfSW5mb1RyYW4gPSBwLnZhbHVlKQ0KIyBHZXQgbW9kZWwgZXN0aW1hdGVzIG9mIGVhY2ggc2NlbmFyaW8NCmNvbkluZm9UcmFuPC0gc3VtbWFyeShjb250cmFzdChhcy5lbW1HcmlkKGFzLmxpc3QocmVmX2dyaWQobW9kSW5mb1RyYW4pKSkpKSAlPiUgDQogICByZW5hbWUoZXN0aW1hdGVfSW5mb1RyYW4gPSBlc3RpbWF0ZSwNCiAgICAgICAgIHAudmFsdWVfSW5mb1RyYW4gPSBwLnZhbHVlKQ0KDQojIEJveHBsb3Qgb2YgTWVhbiBZZWFycyB0byBDYXJyeWluZyBjYXBhY2l0eSBieSBWaXRhbCByYXRlIGFuZCBJbmZvRGVhdGggbGV2ZWwNCmlibUluZm9EZWF0aDwtIG1heFlyICU+JSANCiAgc2VsZWN0KFNjZW5hcmlvLCBNZWFuX1N1cnZpdmVkLCBNZWFuX0V4dGlycGF0ZWQsIFZpdGFsLCBJbmZvRGVhdGgsIEVuZFJlc3VsdCkgJT4lIA0KICBwaXZvdF9sb25nZXIoY29scyA9IGMoTWVhbl9TdXJ2aXZlZCwgTWVhbl9FeHRpcnBhdGVkKSwgbmFtZXNfdG8gPSAiUGFyYW0iLCB2YWx1ZXNfdG8gPSAiTWVhblllYXJzIiwgdmFsdWVzX2Ryb3BfbmEgPSBUUlVFKSAlPiUgDQogIG11dGF0ZSh4Y29sID0gcGFzdGUoVml0YWwsIEVuZFJlc3VsdCwgSW5mb0RlYXRoLCBQYXJhbSkpICU+JSANCiAgbXV0YXRlKHhjb2wgPSBvcmRlcmVkKHhjb2wsIGMoIktzZWxlY3RlZCBBbGwgU3Vydml2ZWQgTG93IE1lYW5fU3Vydml2ZWQiLCAiS3NlbGVjdGVkIEFsbCBTdXJ2aXZlZCBNZWRMb3cgTWVhbl9TdXJ2aXZlZCIsICJLc2VsZWN0ZWQgQWxsIFN1cnZpdmVkIE1lZCBNZWFuX1N1cnZpdmVkIiwgIktzZWxlY3RlZCBBbGwgU3Vydml2ZWQgTWVkSGlnaCBNZWFuX1N1cnZpdmVkIiwgIktzZWxlY3RlZCBBbGwgU3Vydml2ZWQgSGlnaCBNZWFuX1N1cnZpdmVkIiwgIktzZWxlY3RlZCBNaXhlZCBSZXN1bHQgTG93IE1lYW5fU3Vydml2ZWQiLCAiS3NlbGVjdGVkIE1peGVkIFJlc3VsdCBMb3cgTWVhbl9FeHRpcnBhdGVkIiwgIktzZWxlY3RlZCBNaXhlZCBSZXN1bHQgTWVkTG93IE1lYW5fU3Vydml2ZWQiLCAiS3NlbGVjdGVkIE1peGVkIFJlc3VsdCBNZWRMb3cgTWVhbl9FeHRpcnBhdGVkIiwgIktzZWxlY3RlZCBNaXhlZCBSZXN1bHQgTWVkIE1lYW5fU3Vydml2ZWQiLCAiS3NlbGVjdGVkIE1peGVkIFJlc3VsdCBNZWQgTWVhbl9FeHRpcnBhdGVkIiwgIktzZWxlY3RlZCBNaXhlZCBSZXN1bHQgTWVkSGlnaCBNZWFuX1N1cnZpdmVkIiwgIktzZWxlY3RlZCBNaXhlZCBSZXN1bHQgTWVkSGlnaCBNZWFuX0V4dGlycGF0ZWQiLCAiS3NlbGVjdGVkIE1peGVkIFJlc3VsdCBIaWdoIE1lYW5fU3Vydml2ZWQiLCAiS3NlbGVjdGVkIE1peGVkIFJlc3VsdCBIaWdoIE1lYW5fRXh0aXJwYXRlZCIsICJSc2VsZWN0ZWQgQWxsIFN1cnZpdmVkIExvdyBNZWFuX1N1cnZpdmVkIiwgIlJzZWxlY3RlZCBBbGwgU3Vydml2ZWQgTWVkTG93IE1lYW5fU3Vydml2ZWQiLCAiUnNlbGVjdGVkIEFsbCBTdXJ2aXZlZCBNZWQgTWVhbl9TdXJ2aXZlZCIsICJSc2VsZWN0ZWQgQWxsIFN1cnZpdmVkIE1lZEhpZ2ggTWVhbl9TdXJ2aXZlZCIsICJSc2VsZWN0ZWQgQWxsIFN1cnZpdmVkIEhpZ2ggTWVhbl9TdXJ2aXZlZCIsICJSc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IExvdyBNZWFuX1N1cnZpdmVkIiwgIlJzZWxlY3RlZCBNaXhlZCBSZXN1bHQgTG93IE1lYW5fRXh0aXJwYXRlZCIsICJSc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IE1lZExvdyBNZWFuX1N1cnZpdmVkIiwgIlJzZWxlY3RlZCBNaXhlZCBSZXN1bHQgTWVkTG93IE1lYW5fRXh0aXJwYXRlZCIsICJSc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IE1lZCBNZWFuX1N1cnZpdmVkIiwgIlJzZWxlY3RlZCBNaXhlZCBSZXN1bHQgTWVkIE1lYW5fRXh0aXJwYXRlZCIsICJSc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IE1lZEhpZ2ggTWVhbl9TdXJ2aXZlZCIsICJSc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IE1lZEhpZ2ggTWVhbl9FeHRpcnBhdGVkIiwgIlJzZWxlY3RlZCBNaXhlZCBSZXN1bHQgSGlnaCBNZWFuX1N1cnZpdmVkIiwgIlJzZWxlY3RlZCBNaXhlZCBSZXN1bHQgSGlnaCBNZWFuX0V4dGlycGF0ZWQiLCAiUnNlbGVjdGVkIEFsbCBDcmFzaGVkIExvdyBNZWFuX0V4dGlycGF0ZWQiLCAiUnNlbGVjdGVkIEFsbCBDcmFzaGVkIE1lZExvdyBNZWFuX0V4dGlycGF0ZWQiLCAiUnNlbGVjdGVkIEFsbCBDcmFzaGVkIE1lZCBNZWFuX0V4dGlycGF0ZWQiLCAiUnNlbGVjdGVkIEFsbCBDcmFzaGVkIE1lZEhpZ2ggTWVhbl9FeHRpcnBhdGVkIiwgIlJzZWxlY3RlZCBBbGwgQ3Jhc2hlZCBIaWdoIE1lYW5fRXh0aXJwYXRlZCIpKSkgDQoNCiMgRml0IGEgbW9kZWwNCm1vZEluZm9EZWF0aDwtIGFvdihNZWFuWWVhcnMgfiB4Y29sLCBkYXRhID0gaWJtSW5mb0RlYXRoKQ0KIyBHZXQgcGFpcndpc2UgY29udHJhc3RzIG9mIGVhY2ggc2NlbmFyaW8NCmNvbkluZm9EZWF0aFBhaXI8LSBzdW1tYXJ5KHBhaXJzKGFzLmVtbUdyaWQoYXMubGlzdChyZWZfZ3JpZChtb2RJbmZvRGVhdGgpKSkpKSAlPiUgDQogIHJlbmFtZShlc3RpbWF0ZV9JbmZvRGVhdGggPSBlc3RpbWF0ZSwNCiAgICAgICAgIHAudmFsdWVfSW5mb0RlYXRoID0gcC52YWx1ZSkNCiMgR2V0IG1vZGVsIGVzdGltYXRlcyBvZiBlYWNoIHNjZW5hcmlvDQpjb25JbmZvRGVhdGg8LSBzdW1tYXJ5KGNvbnRyYXN0KGFzLmVtbUdyaWQoYXMubGlzdChyZWZfZ3JpZChtb2RJbmZvRGVhdGgpKSkpKSAlPiUgDQogICByZW5hbWUoZXN0aW1hdGVfSW5mb0RlYXRoID0gZXN0aW1hdGUsDQogICAgICAgICBwLnZhbHVlX0luZm9EZWF0aCA9IHAudmFsdWUpDQoNCiMgQm94cGxvdCBvZiBNZWFuIFllYXJzIHRvIENhcnJ5aW5nIGNhcGFjaXR5IGJ5IFZpdGFsIHJhdGUgYW5kIE5haXZlTGVhcm4gbGV2ZWwNCmlibU5haXZlPC0gbWF4WXIgJT4lIA0KICBzZWxlY3QoU2NlbmFyaW8sIE1lYW5fU3Vydml2ZWQsIE1lYW5fRXh0aXJwYXRlZCwgVml0YWwsIE5haXZlTGVhcm4sIEVuZFJlc3VsdCkgJT4lIA0KICBwaXZvdF9sb25nZXIoY29scyA9IGMoTWVhbl9TdXJ2aXZlZCwgTWVhbl9FeHRpcnBhdGVkKSwgbmFtZXNfdG8gPSAiUGFyYW0iLCB2YWx1ZXNfdG8gPSAiTWVhblllYXJzIiwgdmFsdWVzX2Ryb3BfbmEgPSBUUlVFKSAlPiUgDQogIG11dGF0ZSh4Y29sID0gcGFzdGUoVml0YWwsIEVuZFJlc3VsdCwgTmFpdmVMZWFybiwgUGFyYW0pKSAlPiUgDQogIG11dGF0ZSh4Y29sID0gb3JkZXJlZCh4Y29sLCBjKCJLc2VsZWN0ZWQgQWxsIFN1cnZpdmVkIExvdyBNZWFuX1N1cnZpdmVkIiwgIktzZWxlY3RlZCBBbGwgU3Vydml2ZWQgTWVkTG93IE1lYW5fU3Vydml2ZWQiLCAiS3NlbGVjdGVkIEFsbCBTdXJ2aXZlZCBNZWQgTWVhbl9TdXJ2aXZlZCIsICJLc2VsZWN0ZWQgQWxsIFN1cnZpdmVkIE1lZEhpZ2ggTWVhbl9TdXJ2aXZlZCIsICJLc2VsZWN0ZWQgQWxsIFN1cnZpdmVkIEhpZ2ggTWVhbl9TdXJ2aXZlZCIsICJLc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IExvdyBNZWFuX1N1cnZpdmVkIiwgIktzZWxlY3RlZCBNaXhlZCBSZXN1bHQgTG93IE1lYW5fRXh0aXJwYXRlZCIsICJLc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IE1lZExvdyBNZWFuX1N1cnZpdmVkIiwgIktzZWxlY3RlZCBNaXhlZCBSZXN1bHQgTWVkTG93IE1lYW5fRXh0aXJwYXRlZCIsICJLc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IE1lZCBNZWFuX1N1cnZpdmVkIiwgIktzZWxlY3RlZCBNaXhlZCBSZXN1bHQgTWVkIE1lYW5fRXh0aXJwYXRlZCIsICJLc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IE1lZEhpZ2ggTWVhbl9TdXJ2aXZlZCIsICJLc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IE1lZEhpZ2ggTWVhbl9FeHRpcnBhdGVkIiwgIktzZWxlY3RlZCBNaXhlZCBSZXN1bHQgSGlnaCBNZWFuX1N1cnZpdmVkIiwgIktzZWxlY3RlZCBNaXhlZCBSZXN1bHQgSGlnaCBNZWFuX0V4dGlycGF0ZWQiLCAiUnNlbGVjdGVkIEFsbCBTdXJ2aXZlZCBMb3cgTWVhbl9TdXJ2aXZlZCIsICJSc2VsZWN0ZWQgQWxsIFN1cnZpdmVkIE1lZExvdyBNZWFuX1N1cnZpdmVkIiwgIlJzZWxlY3RlZCBBbGwgU3Vydml2ZWQgTWVkIE1lYW5fU3Vydml2ZWQiLCAiUnNlbGVjdGVkIEFsbCBTdXJ2aXZlZCBNZWRIaWdoIE1lYW5fU3Vydml2ZWQiLCAiUnNlbGVjdGVkIEFsbCBTdXJ2aXZlZCBIaWdoIE1lYW5fU3Vydml2ZWQiLCAiUnNlbGVjdGVkIE1peGVkIFJlc3VsdCBMb3cgTWVhbl9TdXJ2aXZlZCIsICJSc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IExvdyBNZWFuX0V4dGlycGF0ZWQiLCAiUnNlbGVjdGVkIE1peGVkIFJlc3VsdCBNZWRMb3cgTWVhbl9TdXJ2aXZlZCIsICJSc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IE1lZExvdyBNZWFuX0V4dGlycGF0ZWQiLCAiUnNlbGVjdGVkIE1peGVkIFJlc3VsdCBNZWQgTWVhbl9TdXJ2aXZlZCIsICJSc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IE1lZCBNZWFuX0V4dGlycGF0ZWQiLCAiUnNlbGVjdGVkIE1peGVkIFJlc3VsdCBNZWRIaWdoIE1lYW5fU3Vydml2ZWQiLCAiUnNlbGVjdGVkIE1peGVkIFJlc3VsdCBNZWRIaWdoIE1lYW5fRXh0aXJwYXRlZCIsICJSc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IEhpZ2ggTWVhbl9TdXJ2aXZlZCIsICJSc2VsZWN0ZWQgTWl4ZWQgUmVzdWx0IEhpZ2ggTWVhbl9FeHRpcnBhdGVkIiwgIlJzZWxlY3RlZCBBbGwgQ3Jhc2hlZCBMb3cgTWVhbl9FeHRpcnBhdGVkIiwgIlJzZWxlY3RlZCBBbGwgQ3Jhc2hlZCBNZWRMb3cgTWVhbl9FeHRpcnBhdGVkIiwgIlJzZWxlY3RlZCBBbGwgQ3Jhc2hlZCBNZWQgTWVhbl9FeHRpcnBhdGVkIiwgIlJzZWxlY3RlZCBBbGwgQ3Jhc2hlZCBNZWRIaWdoIE1lYW5fRXh0aXJwYXRlZCIsICJSc2VsZWN0ZWQgQWxsIENyYXNoZWQgSGlnaCBNZWFuX0V4dGlycGF0ZWQiKSkpDQoNCiMgRml0IGEgbW9kZWwNCm1vZE5haXZlPC0gYW92KE1lYW5ZZWFycyB+IHhjb2wsIGRhdGEgPSBpYm1OYWl2ZSkNCiMgR2V0IHBhaXJ3aXNlIGNvbnRyYXN0cyBvZiBlYWNoIHNjZW5hcmlvDQpjb25OYWl2ZVBhaXI8LSBzdW1tYXJ5KHBhaXJzKGFzLmVtbUdyaWQoYXMubGlzdChyZWZfZ3JpZChtb2ROYWl2ZSkpKSkpICU+JSANCiAgcmVuYW1lKGVzdGltYXRlX05haXZlID0gZXN0aW1hdGUsDQogICAgICAgICBwLnZhbHVlX05haXZlID0gcC52YWx1ZSkNCiMgR2V0IG1vZGVsIGVzdGltYXRlcyBvZiBlYWNoIHNjZW5hcmlvDQpjb25OYWl2ZTwtIHN1bW1hcnkoY29udHJhc3QoYXMuZW1tR3JpZChhcy5saXN0KHJlZl9ncmlkKG1vZE5haXZlKSkpKSkgJT4lIA0KICAgcmVuYW1lKGVzdGltYXRlX05haXZlID0gZXN0aW1hdGUsDQogICAgICAgICBwLnZhbHVlX05haXZlID0gcC52YWx1ZSkNCg0KYWxsRXN0PC0gY29uQm9sZCAlPiUgDQogIHNlbGVjdChjb250cmFzdCwgZXN0aW1hdGVfQm9sZCkgJT4lIA0KICBmdWxsX2pvaW4oY29uTGFtYmRhICU+JSBzZWxlY3QoY29udHJhc3QsIGVzdGltYXRlX0xhbWJkYSksIGJ5ID0gImNvbnRyYXN0IikgJT4lIA0KICBmdWxsX2pvaW4oY29uSW5mb1RyYW4gJT4lIHNlbGVjdChjb250cmFzdCwgZXN0aW1hdGVfSW5mb1RyYW4pLCBieSA9ICJjb250cmFzdCIpICU+JSANCiAgZnVsbF9qb2luKGNvbkluZm9EZWF0aCAlPiUgc2VsZWN0KGNvbnRyYXN0LCBlc3RpbWF0ZV9JbmZvRGVhdGgpLCBieSA9ICJjb250cmFzdCIpICU+JSANCiAgZnVsbF9qb2luKGNvbk5haXZlICU+JSBzZWxlY3QoY29udHJhc3QsIGVzdGltYXRlX05haXZlKSwgYnkgPSAiY29udHJhc3QiKSANCg0KYWxsUGFpcjwtIGNvbkJvbGRQYWlyICU+JSANCiAgc2VsZWN0KGNvbnRyYXN0LCBlc3RpbWF0ZV9Cb2xkKSAlPiUgDQogIGxlZnRfam9pbihjb25MYW1iZGFQYWlyICU+JSANCiAgICAgICAgICAgICAgc2VsZWN0KGNvbnRyYXN0LCBlc3RpbWF0ZV9MYW1iZGEpLCBieSA9ICJjb250cmFzdCIpICU+JSANCiAgbGVmdF9qb2luKGNvbkluZm9UcmFuUGFpciAlPiUgDQogICAgICAgICAgICAgIHNlbGVjdChjb250cmFzdCwgZXN0aW1hdGVfSW5mb1RyYW4pLCBieSA9ICJjb250cmFzdCIpICU+JSANCiAgbGVmdF9qb2luKGNvbkluZm9EZWF0aFBhaXIgJT4lIA0KICAgICAgICAgICAgICBzZWxlY3QoY29udHJhc3QsIGVzdGltYXRlX0luZm9EZWF0aCksIGJ5ID0gImNvbnRyYXN0IikgJT4lIA0KICBsZWZ0X2pvaW4oY29uTmFpdmVQYWlyICU+JSANCiAgICAgICAgICAgICAgc2VsZWN0KGNvbnRyYXN0LCBlc3RpbWF0ZV9OYWl2ZSksIGJ5ID0gImNvbnRyYXN0IikgJT4lIA0KICBzZXBhcmF0ZShjb2wgPSBjb250cmFzdCwgaW50byA9IGMoIlN0YXJ0IiwgIkVuZCIpLCBzZXAgPSAiIC0gIiwgcmVtb3ZlID0gRkFMU0UpICU+JSANCiAgbXV0YXRlKFN0YXJ0X1ZpdGFsID0gY2FzZV93aGVuKHN0cl9kZXRlY3QoU3RhcnQsICJLc2VsZWN0ZWQiKSB+ICJLIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUgfiAiUiIpLA0KICAgICAgICAgRW5kX1ZpdGFsID0gY2FzZV93aGVuKHN0cl9kZXRlY3QoRW5kLCAiS3NlbGVjdGVkIikgfiAiSyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFIH4gIlIiKSwNCiAgICAgICAgIFN0YXJ0X1Jlc3VsdCA9IGNhc2Vfd2hlbihzdHJfZGV0ZWN0KFN0YXJ0LCAiU3Vydml2ZWQiKSB+ICJTIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUgfiAiRSIpLA0KICAgICAgICAgRW5kX1Jlc3VsdCA9IGNhc2Vfd2hlbihzdHJfZGV0ZWN0KEVuZCwgIlN1cnZpdmVkIikgfiAiUyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFIH4gIkUiKSkgJT4lIA0KICB1bml0ZShjb2wgPSBWaXRhbFJlc3VsdCwgU3RhcnRfVml0YWwsIEVuZF9WaXRhbCwgU3RhcnRfUmVzdWx0LCBFbmRfUmVzdWx0LCBzZXAgPSAiIiwgcmVtb3ZlID0gRkFMU0UpICU+JSANCiAgbXV0YXRlKFZpdGFsUmVzdWx0ID0gYXMuZmFjdG9yKFZpdGFsUmVzdWx0KSkNCg0KDQojIEJvbGQgYW5kIExhbWJkYQ0KbW9kQkw8LSBsbShlc3RpbWF0ZV9Cb2xkIH4gZXN0aW1hdGVfTGFtYmRhLCBkYXRhID0gYWxsUGFpcikNCg0KZ2dwbG90bHkoDQogIGFsbFBhaXIgJT4lIA0KICAgIGdncGxvdChhZXMoZXN0aW1hdGVfTGFtYmRhLCBlc3RpbWF0ZV9Cb2xkLCBncm91cCA9IFZpdGFsUmVzdWx0LCBjb2xvciA9IFZpdGFsUmVzdWx0KSkgKw0KICAgIGdlb21fcG9pbnQoKSArDQogICAgZ2d0aXRsZSgiUGFpcndpc2UgQ29udHJhc3Qgb2YgTGluZWFyIE1vZGVsIEVzdGltYXRlcyBCeSBTY2VuYXJpbyBcbiBNZWFuWWVhciB+IFNjZW5hcmlvIFxuIEVhY2ggYXhpcyByZXByZXNlbnRzIGEgbW9kZWwgYmFzZWQgb24gdGhlIHNwZWNpZmllZCBwYXJhbWV0ZXIgXG4gSyA9IEtzZWxlY3RlZDsgUiA9IFJzZWxlY3RlZDsgRSA9IEV4dGlycGF0ZWQ7IFMgPSBTdXJ2aXZlZCIpICsNCiAgICBhbm5vdGF0ZShnZW9tID0gInRleHQiLCB4ID0gLTEwLCB5ID0gMjAsIGxhYmVsID0gcGFzdGUwKCJBZGouIFIyID0gIiwgcm91bmQoc3VtbWFyeShtb2RCTCkkYWRqLnIuc3F1YXJlZCwgMykpKQ0KKQ0KDQojIEJvbGQgYW5kIEluZm9UcmFuDQptb2RCVDwtIGxtKGVzdGltYXRlX0JvbGQgfiBlc3RpbWF0ZV9JbmZvVHJhbiwgZGF0YSA9IGFsbFBhaXIpDQoNCmdncGxvdGx5KA0KICBhbGxQYWlyICU+JSANCiAgICBnZ3Bsb3QoYWVzKGVzdGltYXRlX0luZm9UcmFuLCBlc3RpbWF0ZV9Cb2xkLCBncm91cCA9IFZpdGFsUmVzdWx0LCBjb2xvciA9IFZpdGFsUmVzdWx0KSkgKw0KICAgIGdlb21fcG9pbnQoKSArDQogICAgZ2d0aXRsZSgiUGFpcndpc2UgQ29udHJhc3Qgb2YgTGluZWFyIE1vZGVsIEVzdGltYXRlcyBCeSBTY2VuYXJpbyBcbiBNZWFuWWVhciB+IFNjZW5hcmlvIFxuIEVhY2ggYXhpcyByZXByZXNlbnRzIGEgbW9kZWwgYmFzZWQgb24gdGhlIHNwZWNpZmllZCBwYXJhbWV0ZXIgXG4gSyA9IEtzZWxlY3RlZDsgUiA9IFJzZWxlY3RlZDsgRSA9IEV4dGlycGF0ZWQ7IFMgPSBTdXJ2aXZlZCIpICsNCiAgICBhbm5vdGF0ZShnZW9tID0gInRleHQiLCB4ID0gLTEwLCB5ID0gMjAsIGxhYmVsID0gcGFzdGUwKCJBZGouIFIyID0gIiwgcm91bmQoc3VtbWFyeShtb2RCVCkkYWRqLnIuc3F1YXJlZCwgMykpKQ0KKQ0KDQojIEJvbGQgYW5kIEluZm9EZWF0aA0KbW9kQkQ8LSBsbShlc3RpbWF0ZV9Cb2xkIH4gZXN0aW1hdGVfSW5mb0RlYXRoLCBkYXRhID0gYWxsUGFpcikNCg0KZ2dwbG90bHkoDQogIGFsbFBhaXIgJT4lIA0KICAgIGdncGxvdChhZXMoZXN0aW1hdGVfSW5mb0RlYXRoLCBlc3RpbWF0ZV9Cb2xkLCBncm91cCA9IFZpdGFsUmVzdWx0LCBjb2xvciA9IFZpdGFsUmVzdWx0KSkgKw0KICAgIGdlb21fcG9pbnQoKSArDQogICAgZ2d0aXRsZSgiUGFpcndpc2UgQ29udHJhc3Qgb2YgTGluZWFyIE1vZGVsIEVzdGltYXRlcyBCeSBTY2VuYXJpbyBcbiBNZWFuWWVhciB+IFNjZW5hcmlvIFxuIEVhY2ggYXhpcyByZXByZXNlbnRzIGEgbW9kZWwgYmFzZWQgb24gdGhlIHNwZWNpZmllZCBwYXJhbWV0ZXIgXG4gSyA9IEtzZWxlY3RlZDsgUiA9IFJzZWxlY3RlZDsgRSA9IEV4dGlycGF0ZWQ7IFMgPSBTdXJ2aXZlZCIpICsNCiAgICBhbm5vdGF0ZShnZW9tID0gInRleHQiLCB4ID0gLTEwLCB5ID0gMjAsIGxhYmVsID0gcGFzdGUwKCJBZGouIFIyID0gIiwgcm91bmQoc3VtbWFyeShtb2RCRCkkYWRqLnIuc3F1YXJlZCwgMykpKQ0KKQ0KDQoNCiMgQm9sZCBhbmQgTmFpdmUNCm1vZEJOPC0gbG0oZXN0aW1hdGVfQm9sZCB+IGVzdGltYXRlX05haXZlLCBkYXRhID0gYWxsUGFpcikNCg0KZ2dwbG90bHkoDQogIGFsbFBhaXIgJT4lIA0KICAgIGdncGxvdChhZXMoZXN0aW1hdGVfTmFpdmUsIGVzdGltYXRlX0JvbGQsIGdyb3VwID0gVml0YWxSZXN1bHQsIGNvbG9yID0gVml0YWxSZXN1bHQpKSArDQogICAgZ2VvbV9wb2ludCgpICsNCiAgICBnZ3RpdGxlKCJQYWlyd2lzZSBDb250cmFzdCBvZiBMaW5lYXIgTW9kZWwgRXN0aW1hdGVzIEJ5IFNjZW5hcmlvIFxuIE1lYW5ZZWFyIH4gU2NlbmFyaW8gXG4gRWFjaCBheGlzIHJlcHJlc2VudHMgYSBtb2RlbCBiYXNlZCBvbiB0aGUgc3BlY2lmaWVkIHBhcmFtZXRlciBcbiBLID0gS3NlbGVjdGVkOyBSID0gUnNlbGVjdGVkOyBFID0gRXh0aXJwYXRlZDsgUyA9IFN1cnZpdmVkIikgKw0KICAgIGFubm90YXRlKGdlb20gPSAidGV4dCIsIHggPSAtMTAsIHkgPSAyMCwgbGFiZWwgPSBwYXN0ZTAoIkFkai4gUjIgPSAiLCByb3VuZChzdW1tYXJ5KG1vZEJOKSRhZGouci5zcXVhcmVkLCAzKSkpDQopDQoNCiMgTGFtYmRhIGFuZCBJbmZvVHJhbg0KbW9kTFQ8LSBsbShlc3RpbWF0ZV9MYW1iZGEgfiBlc3RpbWF0ZV9JbmZvVHJhbiwgZGF0YSA9IGFsbFBhaXIpDQoNCmdncGxvdGx5KA0KICBhbGxQYWlyICU+JSANCiAgICBnZ3Bsb3QoYWVzKGVzdGltYXRlX0luZm9UcmFuLCBlc3RpbWF0ZV9MYW1iZGEsIGdyb3VwID0gVml0YWxSZXN1bHQsIGNvbG9yID0gVml0YWxSZXN1bHQpKSArDQogICAgZ2VvbV9wb2ludCgpICsNCiAgICBnZ3RpdGxlKCJQYWlyd2lzZSBDb250cmFzdCBvZiBMaW5lYXIgTW9kZWwgRXN0aW1hdGVzIEJ5IFNjZW5hcmlvIFxuIE1lYW5ZZWFyIH4gU2NlbmFyaW8gXG4gRWFjaCBheGlzIHJlcHJlc2VudHMgYSBtb2RlbCBiYXNlZCBvbiB0aGUgc3BlY2lmaWVkIHBhcmFtZXRlciBcbiBLID0gS3NlbGVjdGVkOyBSID0gUnNlbGVjdGVkOyBFID0gRXh0aXJwYXRlZDsgUyA9IFN1cnZpdmVkIikgKw0KICAgIGFubm90YXRlKGdlb20gPSAidGV4dCIsIHggPSAtMTAsIHkgPSAyMCwgbGFiZWwgPSBwYXN0ZTAoIkFkai4gUjIgPSAiLCByb3VuZChzdW1tYXJ5KG1vZExUKSRhZGouci5zcXVhcmVkLCAzKSkpDQopDQoNCiMgTGFtYmRhIGFuZCBJbmZvRGVhdGgNCm1vZExEPC0gbG0oZXN0aW1hdGVfTGFtYmRhIH4gZXN0aW1hdGVfSW5mb0RlYXRoLCBkYXRhID0gYWxsUGFpcikNCg0KZ2dwbG90bHkoDQogIGFsbFBhaXIgJT4lIA0KICAgIGdncGxvdChhZXMoZXN0aW1hdGVfSW5mb0RlYXRoLCBlc3RpbWF0ZV9MYW1iZGEsIGdyb3VwID0gVml0YWxSZXN1bHQsIGNvbG9yID0gVml0YWxSZXN1bHQpKSArDQogICAgZ2VvbV9wb2ludCgpICsNCiAgICBnZ3RpdGxlKCJQYWlyd2lzZSBDb250cmFzdCBvZiBMaW5lYXIgTW9kZWwgRXN0aW1hdGVzIEJ5IFNjZW5hcmlvIFxuIE1lYW5ZZWFyIH4gU2NlbmFyaW8gXG4gRWFjaCBheGlzIHJlcHJlc2VudHMgYSBtb2RlbCBiYXNlZCBvbiB0aGUgc3BlY2lmaWVkIHBhcmFtZXRlciBcbiBLID0gS3NlbGVjdGVkOyBSID0gUnNlbGVjdGVkOyBFID0gRXh0aXJwYXRlZDsgUyA9IFN1cnZpdmVkIikgKw0KICAgIGFubm90YXRlKGdlb20gPSAidGV4dCIsIHggPSAtMTAsIHkgPSAyMCwgbGFiZWwgPSBwYXN0ZTAoIkFkai4gUjIgPSAiLCByb3VuZChzdW1tYXJ5KG1vZExEKSRhZGouci5zcXVhcmVkLCAzKSkpDQopDQoNCiMgTGFtYmRhIGFuZCBOYWl2ZQ0KbW9kTE48LSBsbShlc3RpbWF0ZV9MYW1iZGEgfiBlc3RpbWF0ZV9OYWl2ZSwgZGF0YSA9IGFsbFBhaXIpDQoNCmdncGxvdGx5KA0KICBhbGxQYWlyICU+JSANCiAgICBnZ3Bsb3QoYWVzKGVzdGltYXRlX05haXZlLCBlc3RpbWF0ZV9MYW1iZGEsIGdyb3VwID0gVml0YWxSZXN1bHQsIGNvbG9yID0gVml0YWxSZXN1bHQpKSArDQogICAgZ2VvbV9wb2ludCgpICsNCiAgICBnZ3RpdGxlKCJQYWlyd2lzZSBDb250cmFzdCBvZiBMaW5lYXIgTW9kZWwgRXN0aW1hdGVzIEJ5IFNjZW5hcmlvIFxuIE1lYW5ZZWFyIH4gU2NlbmFyaW8gXG4gRWFjaCBheGlzIHJlcHJlc2VudHMgYSBtb2RlbCBiYXNlZCBvbiB0aGUgc3BlY2lmaWVkIHBhcmFtZXRlciBcbiBLID0gS3NlbGVjdGVkOyBSID0gUnNlbGVjdGVkOyBFID0gRXh0aXJwYXRlZDsgUyA9IFN1cnZpdmVkIikgKw0KICAgIGFubm90YXRlKGdlb20gPSAidGV4dCIsIHggPSAtMTAsIHkgPSAyMCwgbGFiZWwgPSBwYXN0ZTAoIkFkai4gUjIgPSAiLCByb3VuZChzdW1tYXJ5KG1vZExOKSRhZGouci5zcXVhcmVkLCAzKSkpDQopDQoNCiMgSW5mb1RyYW4gYW5kIEluZm9EZWF0aA0KbW9kVEQ8LSBsbShlc3RpbWF0ZV9JbmZvVHJhbiB+IGVzdGltYXRlX0luZm9EZWF0aCwgZGF0YSA9IGFsbFBhaXIpDQoNCmdncGxvdGx5KA0KICBhbGxQYWlyICU+JSANCiAgICBnZ3Bsb3QoYWVzKGVzdGltYXRlX0luZm9EZWF0aCwgZXN0aW1hdGVfSW5mb1RyYW4sIGdyb3VwID0gVml0YWxSZXN1bHQsIGNvbG9yID0gVml0YWxSZXN1bHQpKSArDQogICAgZ2VvbV9wb2ludCgpICsNCiAgICBnZ3RpdGxlKCJQYWlyd2lzZSBDb250cmFzdCBvZiBMaW5lYXIgTW9kZWwgRXN0aW1hdGVzIEJ5IFNjZW5hcmlvIFxuIE1lYW5ZZWFyIH4gU2NlbmFyaW8gXG4gRWFjaCBheGlzIHJlcHJlc2VudHMgYSBtb2RlbCBiYXNlZCBvbiB0aGUgc3BlY2lmaWVkIHBhcmFtZXRlciBcbiBLID0gS3NlbGVjdGVkOyBSID0gUnNlbGVjdGVkOyBFID0gRXh0aXJwYXRlZDsgUyA9IFN1cnZpdmVkIikgKw0KICAgIGFubm90YXRlKGdlb20gPSAidGV4dCIsIHggPSAtMTAsIHkgPSAyMCwgbGFiZWwgPSBwYXN0ZTAoIkFkai4gUjIgPSAiLCByb3VuZChzdW1tYXJ5KG1vZFREKSRhZGouci5zcXVhcmVkLCAzKSkpDQopDQoNCiMgSW5mb1RyYW4gYW5kIE5haXZlDQptb2RUTjwtIGxtKGVzdGltYXRlX0luZm9UcmFuIH4gZXN0aW1hdGVfTmFpdmUsIGRhdGEgPSBhbGxQYWlyKQ0KDQpnZ3Bsb3RseSgNCiAgYWxsUGFpciAlPiUgDQogICAgZ2dwbG90KGFlcyhlc3RpbWF0ZV9OYWl2ZSwgZXN0aW1hdGVfSW5mb1RyYW4sIGdyb3VwID0gVml0YWxSZXN1bHQsIGNvbG9yID0gVml0YWxSZXN1bHQpKSArDQogICAgZ2VvbV9wb2ludCgpICsNCiAgICBnZ3RpdGxlKCJQYWlyd2lzZSBDb250cmFzdCBvZiBMaW5lYXIgTW9kZWwgRXN0aW1hdGVzIEJ5IFNjZW5hcmlvIFxuIE1lYW5ZZWFyIH4gU2NlbmFyaW8gXG4gRWFjaCBheGlzIHJlcHJlc2VudHMgYSBtb2RlbCBiYXNlZCBvbiB0aGUgc3BlY2lmaWVkIHBhcmFtZXRlciBcbiBLID0gS3NlbGVjdGVkOyBSID0gUnNlbGVjdGVkOyBFID0gRXh0aXJwYXRlZDsgUyA9IFN1cnZpdmVkIikgKw0KICAgIGFubm90YXRlKGdlb20gPSAidGV4dCIsIHggPSAtMTAsIHkgPSAyMCwgbGFiZWwgPSBwYXN0ZTAoIkFkai4gUjIgPSAiLCByb3VuZChzdW1tYXJ5KG1vZFROKSRhZGouci5zcXVhcmVkLCAzKSkpDQopDQoNCiMgSW5mb0RlYXRoIGFuZCBOYWl2ZQ0KbW9kRE48LSBsbShlc3RpbWF0ZV9JbmZvRGVhdGggfiBlc3RpbWF0ZV9OYWl2ZSwgZGF0YSA9IGFsbFBhaXIpDQoNCmdncGxvdGx5KA0KICBhbGxQYWlyICU+JSANCiAgICBnZ3Bsb3QoYWVzKGVzdGltYXRlX05haXZlLCBlc3RpbWF0ZV9JbmZvRGVhdGgsIGdyb3VwID0gVml0YWxSZXN1bHQsIGNvbG9yID0gVml0YWxSZXN1bHQpKSArDQogICAgZ2VvbV9wb2ludCgpICsNCiAgICBnZ3RpdGxlKCJQYWlyd2lzZSBDb250cmFzdCBvZiBMaW5lYXIgTW9kZWwgRXN0aW1hdGVzIEJ5IFNjZW5hcmlvIFxuIE1lYW5ZZWFyIH4gU2NlbmFyaW8gXG4gRWFjaCBheGlzIHJlcHJlc2VudHMgYSBtb2RlbCBiYXNlZCBvbiB0aGUgc3BlY2lmaWVkIHBhcmFtZXRlciBcbiBLID0gS3NlbGVjdGVkOyBSID0gUnNlbGVjdGVkOyBFID0gRXh0aXJwYXRlZDsgUyA9IFN1cnZpdmVkIikgKw0KICAgIGFubm90YXRlKGdlb20gPSAidGV4dCIsIHggPSAtMTAsIHkgPSAyMCwgbGFiZWwgPSBwYXN0ZTAoIkFkai4gUjIgPSAiLCByb3VuZChzdW1tYXJ5KG1vZEROKSRhZGouci5zcXVhcmVkLCAzKSkpDQopDQoNCg0KYGBgDQoNCiMjIyBIZXJlIGFyZSB0aGUgYWN0dWFsIHRhYmxlcyBvZiB0aGUgRWZmZWN0IFNpemVzIGZvciB0aGUgbGluZWFyIG1vZGVscw0KDQpUaGlzIHRhYmxlIHJlcHJlc2VudCB0aGUgRWZmZWN0IHNpemUgb2YgZWFjaCBTY2VuYXJpbyBvbiBNZWFuWWVhcnMgdG8gcmVhY2ggSyBvciBDcmFzaC4gSSBkaWQgbm90IGNhbGN1bGF0ZSBhbnkgZGlmZmVyZW5jZXMgYmV0d2VlbiBlZmZlY3Qgc2l6ZXMsIGJ1dCB5b3UgY291bGQgZG8gc28gaWYgeW91IGZlZWwgaXQgd291bGQgYmUgaW5mb3JtYXRpdmUuDQoNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0V9DQphbGxFc3QNCg0KYGBgDQoNClRoaXMgdGFibGUgcmVwcmVzZW50IHRoZSBFZmZlY3Qgc2l6ZSBQYWlyd2lzZSBjb21wYXJpc29ucyBvZiBlYWNoIFNjZW5hcmlvIG9uIE1lYW5ZZWFycyB0byByZWFjaCBLIG9yIENyYXNoLiBUaGlzIGlzIHRoZSB0YWJsZSB1c2VkIGZvciB0aGUgYWJvdmUgU2NhdHRlcnBsb3RzLiAqKkZZSToqKiBGb3IgdGhpcyB0byB3b3JrLCBJIHJlbmFtZWQgdGhlIEJvbGQgY2F0ZWdvcmllcyB0byBiZSBMb3cgLSBIaWdoLCBzbyBJIHJlbW92ZWQgdGhlIHByZWZpeCAnc2tldycsIGFuZCBJIGFsc28gcmVuYW1lZCAndW5pZm9ybScgdG8gPSAnTWVkJy4gSnVzdCB0byBhbGxvdyBmb3IgZWFzaWVyIGRhdGEgam9pbmluZy4NCg0KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRX0NCmFsbFBhaXINCg0KYGBg